Hola,
El siguiente texto y ejemplo lo saque del libro de
programación de sistemas embebidos en C de alfaomega, pag. 208
Dice:
Por recomendación si un archivo de cabecera (header *.h) tiene por nombre por ejemplo file.h, se puede usar como norma general que el archivo file.h tenga la siguiente lineas:
/********file.h********/
#ifndef file__h
#define file__h
... /* Código del usuario */
#endif
/*****end of file.h*****/
Ahora coloque unos mensajes al anterior código para detectar por donde pasa el compilador y comprobar el funcionamiento de la directiva #ifndef
/********file.h********/
#ifndef file__h
#define file__h
#warning "el compilador paso por aquí, por que no esta definido file__h "
... /* Código del usuario */
#else
#warning "ya esta definido file__h "
#endif
/*****end of file.h*****/
ahora se incluye el anterior archivo
file.h desde otros dos archivos de nombre
funcion1.h y funcion2.h para comprobar cuantas veces el compilador llama a file.h y ver si la directiva
#ifndef file__h trabaja a no
/********funcion1.h********/
#include "file.h"
...
/*****end of funcion1.h*****/
/********funcion2.h********/
#include "file.h"
...
/*****end of funcion2.h*****/
Al compilar veo que no sirve la recomendación que hace el libro de programación en C de incluir la siguiente linea al inicio de un archivo cabecera (header *.h)
#ifndef file__h La primer pasada que hace el compilador arroja correctamente el siguiente mensaje "el compilador paso por aquí, por que no esta definido file__h " OK
pero la segunda ves ya no debería por que ya se definió antes, es decir debe arrojar #warning "ya esta definido file__h "
Conclucion el compilador Codewarrior genera dos veces el mismo mensaje
"el compilador paso por aquí, por que no esta definido file__h "?
Por favor analicen los códigos anteriores y me comentan
Gracias
Nota la directiva
#warning no se si esta disponible en PIC-C, por eso coloco esta publicación acá