El encabezado de guardia es para evitar problemas si el archivo de encabezado se incluye más de una vez; p.ej.
#ifndef MARKER
#define MARKER
// declarations
#endif
La primera vez que este archivo es #include
-ed, el símbolo MARKER
preprocesador será indefinido, por lo que el preprocesador definirá el símbolo, y las siguientes declaraciones será incluido en el código fuente visto por el compilador. En los #include
's posteriores, se definirá el símbolo MARKER
y, por lo tanto, todo en el #ifnde
/#endif
será eliminado por el preprocesador.
Para que esto funcione correctamente, el símbolo MARKER
debe ser diferente para cada archivo de encabezado que posiblemente sea #include
-ed.
La razón por la cual este tipo de cosas es necesario es que es ilegal en C/C++ definir un tipo o función con el mismo nombre más de una vez en una unidad de compilación. El guardia permite un archivo de encabezado a #include
otros archivos de encabezado sin preocuparse de que esto pueda ocasionar que algunas declaraciones se incluyan varias veces.
En resumen, no evitar que de #include
-ing un archivo y otra vez. Más bien, le permite hacer esto sin causar errores de compilación.
El término aceptado para esto en C++ es "incluir guardia". –
Wikipedia da [una muy buena explicación] (http://en.wikipedia.org/wiki/Include_guard) sobre cómo funcionan los guardias. –