He estado viendo un código como este generalmente al comienzo de los archivos de encabezado:
#ifndef HEADERFILE_H
#define HEADERFILE_H
Y al final del archivo es
#endif
¿Cuál es el propósito de esto?
c++
c
c-preprocessor
Asad Khan
fuente
fuente

#pragmaes: activa una función específica del compilador. Aunque#pragma oncees muy ampliamente compatible, no es estándar.info cppo consulte aquí ) dice "no todos los preprocesadores la reconocen, por lo que no puede confiar en ella en un programa portátil". Y GNU cpp optimiza el idioma común y portátil#ifndefpara que sea tan eficiente como#pragma once.#ifndef HEADERFILE_Hpuede violar el espacio de nombres de la implementación del nombre del encabezado para empezarE; los identificadores que comienzan conEy un dígito o letra mayúscula están reservados para<errno.h>. Sugiero#ifndef H_HEADERFILE.Respuestas:
Esos se llaman #include guardias .
Una vez que se incluye el encabezado, comprueba si
HEADERFILE_Hse define un valor único (en este caso ). Luego, si no está definido, lo define y continúa al resto de la página.Cuando se vuelve a incluir el código, el primero
ifndeffalla y se genera un archivo en blanco.Eso evita la doble declaración de cualquier identificador como tipos, enumeraciones y variables estáticas.
fuente
#pragma onceque hace lo mismo :-)#pragma onceno es portátil;#ifndefSe recomienda el idioma común .#ifndefcomprueba si el token dado ha estado#definedantes en el archivo o en un archivo incluido; si no, incluye el código entre este y el cierre#elseo, si no#elseestá presente, la#endifdeclaración.#ifndefa menudo se usa para hacer que los archivos de encabezado sean idempotentes definiendo un token una vez que el archivo se ha incluido y verificando que el token no se haya establecido en la parte superior de ese archivo.fuente
#ifndef H_HEADER_NAME.Esto evita la inclusión múltiple del mismo archivo de encabezado varias veces.
Suponga que ha incluido este archivo de encabezado en varios archivos. Entonces, la primera vez que __COMMON_H__ no está definida, se definirá y se incluirá el archivo de encabezado.
La próxima vez que se defina __COMMON_H__, no se volverá a incluir.
fuente
Se llaman ifdef o incluyen guardias.
Si escribe un programa pequeño, puede parecer que no es necesario, pero a medida que el proyecto crece, puede incluir intencionalmente o no un archivo muchas veces, lo que puede generar una advertencia de compilación como la variable ya declarada.
Si no se declara, lo que significa que #ifndef genera verdadero, solo la parte entre #ifndef y #endif ejecutada de lo contrario no. Esto evitará volver a declarar los identificadores, enumeraciones, estructura, etc.
fuente