¿Por qué #ifndef y #define se usan en los archivos de encabezado de C ++?

He estado viendo un código como este generalmente en el inicio de los archivos de encabezado:

#ifndef HEADERFILE_H #define HEADERFILE_H 

Y al final del archivo está

 #endif 

¿Cuál es el propósito de esto?

Esos se llaman #include guardias .

Una vez que se incluye el encabezado, se verifica si se define un valor único (en este caso HEADERFILE_H ). Entonces, si no está definido, lo define y continúa con el rest de la página.

Cuando el código se incluye de nuevo, el primer ifndef falla, lo que da como resultado un archivo en blanco.

Eso evita la statement doble de cualquier identificador como tipos, enumeraciones y variables estáticas.

 #ifndef  /* code */ #else /* code to include if the token is defined */ #endif 

#ifndef comprueba si el token dado #defined ha sido #defined en el archivo o en un archivo incluido; si no, incluye el código entre él y el #else cierre o, si no está presente #endif , statement #endif . #ifndef menudo se utiliza para idempotent de los archivos de encabezado definiendo un token una vez que se ha incluido el archivo y comprobando que el token no se configuró en la parte superior de ese archivo.

 #ifndef _INCL_GUARD #define _INCL_GUARD #endif 

Esto evita la inclusión múltiple del mismo archivo de encabezado varias veces.

 #ifndef __COMMON_H__ #define __COMMON_H__ //header file content #endif 

Supongamos que ha incluido este archivo de encabezado en varios archivos. Por lo tanto, la primera vez que __COMMON_H__ no está definido, se definirá y se incluirá el archivo de encabezado.

La próxima vez __COMMON_H__ se define, por lo que no se incluirá nuevamente.