[C con Clase] Aviso en la compilación
omar mendoza
omar.p9 en gmail.com
Sab Ene 5 16:03:24 CET 2013
Hola a todos, no tenía nada que hacer y estaba leyendo como simular
orientación a objetos en C, el siguiente código funciona y hace lo que
espero que haga, pero me manda algunos avisos en la compilación que no
entiendo.
¿Alguien sabrá qué pasa?
compilador
omar en euclides:~/code/c_c++$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia. NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR
El aviso al compilar es
omar en euclides:~/code/c_c++$ gcc objC2.c -o objC2
objC2.c: En la función ‘newObj’:
objC2.c:13:24: aviso: declaración implícita incompatible de la función
interna ‘malloc’ [activado por defecto]
objC2.c:19:5: aviso: declaración implícita incompatible de la función
interna ‘exit’ [activado por defecto]
objC2.c: En la función ‘set’:
objC2.c:29:5: aviso: declaración implícita incompatible de la función
interna ‘exit’ [activado por defecto]
objC2.c:36:26: aviso: declaración implícita incompatible de la función
interna ‘malloc’ [activado por defecto]
objC2.c:40:5: aviso: declaración implícita incompatible de la función
interna ‘exit’ [activado por defecto]
objC2.c: En la función ‘printObj’:
objC2.c:51:5: aviso: declaración implícita incompatible de la función
interna ‘exit’ [activado por defecto]
objC2.c: En la función ‘delete’:
objC2.c:59:3: aviso: declaración implícita incompatible de la función
interna ‘free’ [activado por defecto]
El código es el siguiente
#include <stdio.h>
#include <string.h>
struct _Objeto{
int edad;
char *nombre;
};
typedef struct _Objeto *Objeto;
Objeto newObj(){
Objeto obj = (Objeto)malloc(sizeof(struct _Objeto));
bzero(obj, sizeof(struct _Objeto));
if (obj == NULL) {
fprintf(stderr,"Error al crear el objeto\n");
exit(1);
}
return obj;
}
void set(Objeto obj, int Edad, const char *Nombre){
if (obj == NULL) {
fprintf(stderr, "Error: objeto pasado es NULL\n");
exit(1);
}
obj->edad = Edad;
int tam = strlen(Nombre);
obj->nombre = (char *) malloc((tam+1) * sizeof (char));
if (obj->nombre == NULL) {
fprintf(stderr, "No hay memoria para guardar el nombre\n");
exit(1);
}
strncpy(obj->nombre, Nombre, tam);
}
void printObj(Objeto obj){
if (obj == NULL) {
fprintf(stderr, "Error: objeto pasado es NULL\n");
exit(1);
}
printf("Edad %d\nNombre %s\n", obj->edad, obj->nombre);
}
void delete(Objeto obj){
free(obj->nombre);
obj->nombre = NULL;
free(obj);
obj = NULL;
}
int main(int argc, const char *argv[]) {
Objeto obj = newObj();
set(obj, 29, "omar");
printObj(obj);
delete(obj);
return 0;
}
Saludos!!
--
Omar Jonathan Mendoza Bernal
"Las cicatrices nos recuerdan que el pasado fue real" Dr. Lecter en Dragón
Rojo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130105/6a897e8d/attachment.html>
Más información sobre la lista de distribución Cconclase