2010-06-05 13 views
8

En C++, cuál es el propósito de la protección de encabezado en el programa C++.Propósito de las protecciones de encabezado

De la red encontré que es para prevenir la inclusión de archivos una y otra vez, pero ¿cómo lo garantiza el protector de encabezado?

+0

El término aceptado para esto en C++ es "incluir guardia". –

+0

Wikipedia da [una muy buena explicación] (http://en.wikipedia.org/wiki/Include_guard) sobre cómo funcionan los guardias. –

Respuesta

14

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.

2

El propósito de las protecciones de encabezado es evitar problemas donde algunos códigos pueden aparecer solo una vez por unidad de traducción.

Un ejemplo es una estructura. No puede redefinir una estructura incluso si la segunda definición es idéntica. Por lo tanto, si intenta compilar lo siguiente:

struct foo { int x; }; 
struct foo { int x; }; 

El compilador fallará debido a la redefinición.

Puede ser difícil garantizar que solo incluya un encabezado una vez (esto sucede cuando los encabezados incluyen otros encabezados). Si su encabezado tiene una definición de estructura, esto hará que la compilación falle. Los protectores de encabezado son el truco fácil de modo que, incluso si un encabezado se incluye varias veces, su contenido solo aparece una sola vez.

Cuestiones relacionadas