[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