Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/07/2011, 10:58
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: Archivos de cabezera? interfaces?

No estas en todo lo cierto. Mira este ejemplo:
Archivo "t.c"
Código C:
Ver original
  1. #include "t.h"
  2. int main ()
  3.  
  4. {
  5.     hola();
  6.    
  7. }

archivo "tt.c"
Código C:
Ver original
  1. #include "t.h"
  2. int main2 ()
  3.  
  4. {
  5.     hola();
  6.    
  7. }

archivo "t.h"
Código C:
Ver original
  1. #ifndef NOMBRE_CABECERA
  2. #define NOMBRE_CABECERA
  3.  
  4. int hola()
  5. {
  6. int p = 1;
  7.  
  8. }
  9.  
  10. #endif

Comando para compilar: gcc t.c tt.c
Respuesta del compilador:
Cita:
/tmp/ccREYCK2.o: In function `hola':
tt.c:(.text+0x0): multiple definition of `hola'
/tmp/ccunxPRr.o:t.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
Que paso? Sencillo cada archivo cpp tiene su ambiente de definiciones. Por mas que el include de t.c haya definido NOMBRE_CABECERA, el archivo tt.c ni se entero de eso, asi que la vuelve a definir. Como estabamos hablando de una implementacion y no solo de una definicion, el resultado es, dos veces la misma funcion, Y eso es lo que nos dice el compilador multiple definiciones para la funcion hola.

Ese truco de los define sirve para evitar includes en ciclo o que por ejemplo se tengo un archivo "comun.h" y dos archivos que llamen a "comun.h" (a.h y b.h). Si en un archivo .c incluimos a "a.h" y a "b.h", ahi si estamos evitando la doble definicion.


Saludos,