Saltar al contenido

¿Qué hacen exactamente los guardias de inclusión C?

Después de de nuestra prolongada selección de información hemos podido resolver esta contrariedad que tienen ciertos los lectores. Te compartimos la respuesta y deseamos resultarte de mucha apoyo.

Solución:

es un preprocesador macro.

Todo es sintaxis de preprocesador, que básicamente dice, si esto macro aún no se ha definido, defínalo e incluya todo el código entre el #ifndef y #endif

Lo que logra es evitar la inclusión de un archivo más de una vez, lo que poder conducir a problemas en su código.

Tu pregunta:

¿Y por qué está bien olvidar el protector de inclusión en cuyo caso también podemos olvidar agregar #define HEADER_FILE?

Está bien olvidarlo porque todavía es código C legal sin él. El preprocesador procesa su archivo antes de compilarlo e incluye el código especificado en su programa final si no hay una lógica que especifique por qué no debería hacerlo. Es simplemente una práctica común, pero no es obligatorio.

Un ejemplo simple podría ayudar a ilustrar cómo funciona esto:

Su archivo de encabezado, header_file.h diremos, contiene esto:

#ifndef HEADER_FILE
#define HEADER_FILE

int two(void)
    return 2;


#endif

En otro archivo (foo.c), Es posible que usted tenga:

#include "header_file.h"

void foo() 
    int value = two();
    printf("foo value=%dn", value);       

Lo que esto se traducirá una vez que esté “preprocesado” y listo para la compilación es esto:

int two(void)
    return 2;


void foo() 
    int value = two();
    printf("foo value=%dn", value);       

Todo lo que la protección de inclusión está logrando aquí es determinar si el contenido del encabezado entre el #ifndef ... y #endif se debe pegar en lugar del original #include.

Sin embargo, dado que esa función no está declarada extern o static, y en realidad está implementado en un archivo de encabezado, tendría un problema si intentara usarlo en otro archivo fuente, ya que la definición de la función no estaría incluida.

Evitas que el archivo se incluya más de una vez, aquí

#ifndef HEADER_FILE

prueba si HEADER_FILE NO está definido, en caso de que eso sea true entonces

#define HEADER_FILE

lo definiría, ahora si incluye el archivo en otro archivo, la primera vez que definirá HEADER_FILE, mientras que la segunda vez, ya estará definido y por lo tanto no se vuelve a incluir el contenido del archivo, ya que el #ifndef HEADER_FILE estarán false.

Recuerde que estos son evaluados por el preprocesador antes de que se realice la compilación real, por lo que se evalúan en el momento de la compilación.

Si crees que ha resultado útil este artículo, sería de mucha ayuda si lo compartes con más juniors de este modo contrubuyes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *