Created
June 15, 2015 14:49
-
-
Save 456789123/8fb6ae9ba7246255dc3a to your computer and use it in GitHub Desktop.
Com relação ao último programa que foi postado em C ansi, este aqui está melhorado com funções estáticas. Aqui sim está dando uma boa interpretação a Orientação a Objetos.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Compilando: | |
DEBUG: | |
gcc -Wall -g pessoav2.c -DDEBUG -o pessoav2 | |
RELEASE: | |
gcc -Wall -O2 pessoav2.c -o pessoav2 | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
/* Pessoa */ | |
typedef struct | |
{ | |
char * nome; | |
char * cidade; | |
char * pais; | |
char * cpf; | |
} pessoa_t; | |
static void * mystrdup( const char * str ); | |
static void * mymalloc( size_t len ); | |
static void myfree( void * prt ); | |
static pessoa_t * pessoa_criar( const char * nome, const char * cidade, const char * pais, const char * cpf ); | |
static void pessoa_imprimir( FILE * pf, pessoa_t * this ); | |
static void pessoa_liberar( pessoa_t * this ); | |
static void * mystrdup( const char * str ) | |
{ | |
#ifdef DEBUG | |
char * p = NULL; | |
p = strdup( str ); | |
fprintf( stderr, "[DEBUG] func=strdup() ptrsrc=%p - ptrdst=%p - str=\"%s\"\n", str, p, str ); | |
return p; | |
#else | |
return strdup( str ); | |
#endif | |
} | |
static void * mymalloc( size_t len ) | |
{ | |
#ifdef DEBUG | |
void * ptr = NULL; | |
ptr = malloc( len ); | |
fprintf( stderr, "[DEBUG] func=malloc() - ptr=%p - len=%ld\n", ptr, len ); | |
return ptr; | |
#else | |
return malloc( len ); | |
#endif | |
} | |
static void myfree( void * ptr ) | |
{ | |
#ifdef DEBUG | |
fprintf( stderr, "[DEBUG] func=free() - ptr=%p\n", ptr ); | |
free(ptr); | |
#else | |
free(ptr); | |
#endif | |
} | |
static pessoa_t * pessoa_criar( const char * nome, const char * cidade, const char * pais, const char * cpf ) | |
{ | |
pessoa_t * p = NULL; | |
p = mymalloc( sizeof( pessoa_t ) ); | |
p->nome = mystrdup(nome); | |
p->cidade = mystrdup(cidade); | |
p->pais = mystrdup(pais); | |
p->cpf = mystrdup(cpf); | |
return p; | |
} | |
static void pessoa_imprimir( FILE * pf, pessoa_t * this ) | |
{ | |
fprintf( pf, "PESSOA:\n" ); | |
fprintf( pf, " * Nome : %s\n", this->nome ); | |
fprintf( pf, " * Cidade: %s\n", this->cidade ); | |
fprintf( pf, " * Pais : %s\n", this->pais ); | |
fprintf( pf, " * CPF : %s\n", this->cpf ); | |
} | |
static void pessoa_liberar( pessoa_t * this ) | |
{ | |
myfree( this->nome ); | |
myfree( this->cidade ); | |
myfree( this->pais ); | |
myfree( this->cpf ); | |
myfree( this ); | |
} | |
int main( int argc, char **argv ) | |
{ | |
pessoa_t * pessoa[ 4 ]; | |
pessoa[0] = pessoa_criar( "Mary Jane Watson", "Manhatan, New York", "Estados Unidos da America", "123.123.123-00" ); | |
pessoa[1] = pessoa_criar( "Hatory Hanzo", "Nagasaki, Japao", "Japao Asia", "321.321.321-12" ); | |
pessoa[2] = pessoa_criar( "Bruce Wayne", "Gotan, Gotan City", "Estados Unidos da America", "234.567.123-45" ); | |
pessoa[3] = pessoa_criar( "Diana ( Mulher Maravilha )", "Athenas, Athenas das Amazonas", "Grecia Europa", "321.111.222-45" ); | |
pessoa_imprimir( stdout, pessoa[0] ); | |
pessoa_imprimir( stdout, pessoa[1] ); | |
pessoa_imprimir( stdout, pessoa[2] ); | |
pessoa_imprimir( stdout, pessoa[3] ); | |
pessoa_liberar(pessoa[0]); | |
pessoa_liberar(pessoa[1]); | |
pessoa_liberar(pessoa[2]); | |
pessoa_liberar(pessoa[3]); | |
return EXIT_SUCCESS; | |
} | |
/* fim-de-arquivo */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment