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
#pragma
es: activa una función específica del compilador. Aunque#pragma once
es muy ampliamente compatible, no es estándar.info cpp
o 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#ifndef
para que sea tan eficiente como#pragma once
.#ifndef HEADERFILE_H
puede violar el espacio de nombres de la implementación del nombre del encabezado para empezarE
; los identificadores que comienzan conE
y 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_H
se 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
ifndef
falla 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 once
que hace lo mismo :-)#pragma once
no es portátil;#ifndef
Se recomienda el idioma común .#ifndef
comprueba si el token dado ha estado#defined
antes en el archivo o en un archivo incluido; si no, incluye el código entre este y el cierre#else
o, si no#else
está presente, la#endif
declaración.#ifndef
a 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