Skip to content

Instantly share code, notes, and snippets.

@456789123
Created June 15, 2015 14:49
Show Gist options
  • Save 456789123/8fb6ae9ba7246255dc3a to your computer and use it in GitHub Desktop.
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.
/*
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