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

Resuelto Asad Khan asked hace 14 años • 5 respuestas

He estado viendo código como este normalmente al 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?

Asad Khan avatar Oct 31 '09 17:10 Asad Khan
Aceptado

Esos se llaman #incluyen guardias .

Una vez incluido el encabezado, verifica si HEADERFILE_Hse define un valor único (en este caso). Luego, si no está definido, lo define y continúa con el resto de la página.

Cuando se vuelve a incluir el código, el primero ifndeffalla, lo que genera un archivo en blanco.

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

LiraNuna avatar Oct 31 '2009 10:10 LiraNuna
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif

#ifndefcomprueba si el token dado ha estado #definedanteriormente en el archivo o en un archivo incluido; si no, incluye el código entre este y el cierre #elseo, si no #elseestá presente, #endifla declaración. #ifndefse usa a menudo para hacer que los archivos de encabezado sean idempotentes definiendo un token una vez que se ha incluido el archivo y verificando que el token no se haya establecido en la parte superior de ese archivo.

#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
iampranabroy avatar Aug 24 '2013 19:08 iampranabroy

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

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

Suponga que ha incluido este archivo de encabezado en varios archivos. Entonces, la primera vez que __COMMON_H__ no esté definido, se definirá y se incluirá el archivo de encabezado.

La próxima vez que se defina __COMMON_H__, no se volverá a incluir.

Sandeep_black avatar Feb 13 '2018 06:02 Sandeep_black

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 resultar en una advertencia de compilación como una variable ya declarada.

  • #ifndefcomprueba si HEADERFILE_Hno está declarado.

  • #definedeclarará HEADERFILE_Huna vez #ifndefque genere verdadero.

  • #endifes conocer el alcance de, es decir, #ifndefel final de #ifndef.

Si no se declara, lo que significa #ifndefque genera verdadero, entonces solo se ejecuta la parte entre #ifndefy ; de lo contrario, no. #endifEsto evitará que se vuelvan a declarar los identificadores, enumeraciones, estructura, etc...

Mohit Jain avatar Sep 14 '2019 04:09 Mohit Jain