Los Header Guards en C++ son directivas de compilación condicional que ayudan a evitar errores que surgen cuando la misma función o variable se define más de una vez por error de un programador. Según C++ , cuando una función o una variable se define más de una vez, arroja un error. A continuación se muestra el programa para ilustrar lo mismo:
Programa 1:
C++
// C++ program to illustrate error // caused due to defining same // function more than once #include <iostream> using namespace std; // Function 1 void fool() { cout << "hello"; } // Function 2 void fool() { cout << "hello maddy"; } // Driver Code int main() { // Function Call fool(); return 0; }
Producción:
Explicación:
En lo anterior, se definió dos veces una función tonto() que está causando un error fatal.
Programa 2:
C++
// C++ program to illustrate error // caused due to defining same // variable more than once #include <iostream> using namespace std; // Driver Code int main() { // error: note: 'double x' previously double x{}; // declared here int x{ 2 }; return 0; }
Producción:
Explicación:
C++
- Deje que haya un archivo de encabezado llamado pentagon.h como se muestra a continuación:
C++
// Function to get the side of // the pentagon int getting_pentagon_side() { // Return the side return 5; }
- Deje que haya otro archivo de encabezado llamado «mathematics.h» que incluya el archivo de encabezado «pentagon.h» .
C++
// Including another header file // "pentagon.h" in the current program #include "pentagon.h"
- Ahora, se crea un programa en C++ con el nombre “pentagon.cpp” como se muestra a continuación:
Programa 3:
C++
// C++ program to illustrate the error // discussed above #include <iostream> // Include header files created #include "mathematics.h" #include "pentagon.h" using namespace std; // Driver Code int main() { return 0; }
Producción:
Para solucionar el error causado anteriormente, la idea es usar el concepto de “Header Guard” para evitar errores que ocurren cuando la misma variable de función se define más de una vez por error del programador.
Un protector de encabezado puede evitar este tipo de errores mediante el uso de directivas de compilación condicional . Es una combinación de directivas de compilación condicional que protegen su encabezado para que no se incluya en un programa varias veces.
Sintaxis:
#ifndef HEADER_H_NAME #define HEADER_H_NAME /*... ...*/ #endif
Ahora, vayamos al ejemplo anterior y veamos cómo se puede resolver el conflicto de error:
- Primero, el archivo de encabezado «pentagon.h» se modifica como:
#ifndef PENTAGON_H #define PENTAGON_H int getting_pentagon_side() { return 5; } #endif
- Ahora el archivo de encabezado «mathematics.h» que incluye «pentagon.h» se modifica como:
#ifndef MATHEMATICS_H #define MATHEMATICS_H #include "pentagon.h" #endif
A continuación se muestra el programa después de los cambios anteriores para evitar los errores:
C++
// C++ program to illustrate how to // avoid errors using Header Guard #include <iostream> // Include header guards in both // the header files #include "mathematics.h" // Now, the error will not occur #include "pentagon.h" using namespace std; // Driver Code int main() { // Function Call to find the // sides of the pentagon int i{ getting pentagon side() }; // Print the sides cout << "sides in a pentagon is: " << i; return 0; }
Producción:
Publicación traducida automáticamente
Artículo escrito por madhav_mohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA