En cada fichero de cabecera que contiene una estructura,
primero debería comprobar si ese fichero ya ha sido includo en
este fichero cpp
particular. Hágalo
comprobando una bandera del preprocesador. Si la bandera no
está definida, el fichero no se ha incluido aún, y se debería
definir la bandera (de modo que la estructura no se pueda
redeclarar) y declarar la estructura. Si la bandera estaba
definida entonces el tipo ya ha sido declarado de modo que
debería ignorar el código que la declara. Así es como debería
ser un fichero de cabecera:
#ifndef HEADER_FLAG #define HEADER_FLAG // Escriba la declaración aquí... #endif // HEADER_FLAG
Como puede ver, la primera vez que se incluye el fichero de
cabecera, los contenidos del fichero (incluyendo la
declaración del tipo) son incluidos por el preprocesador. Las
demás veces que se incluya -en una única unidad de
programación- la declaración del tipo será ignorada. El nombre
HEADER_FLAG
puede ser cualquier nombre
único, pero un estándar fiable a seguir es poner el nombre del
fichero de cabecera en mayúsculas y reemplazar los puntos por
guiones bajos (sin embargo, el guión bajo al comienzo está
reservado para nombres del sistema). Este es un ejemplo:
//: C04:Simple.h // Simple header that prevents re-definition #ifndef SIMPLE_H #define SIMPLE_H struct Simple { int i,j,k; initialize() { i = j = k = 0; } }; #endif // SIMPLE_H ///:~
Listado 4.8. C04/Simple.h
Aunque el SIMPLE_H
después de
#endif
está comentado y es ignorado por el
preprocesador, es útil para documentación.
Estas sentencias del preprocesador que impiden inclusiones múltiples se denominan a menudo guardas de inclusión (include guards)