Menu
Coddy logo textTech

Guardas de inclusión

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 2 de 61.

Cuando un archivo de encabezado se incluye varias veces en un proyecto, el compilador ve las mismas declaraciones repetidamente, lo que provoca errores. Esto ocurre habitualmente cuando varios archivos incluyen el mismo encabezado o cuando los encabezados se incluyen entre sí. Las protecciones contra inclusiones resuelven este problema.

Una guarda de inclusión utiliza tres directivas de preprocesador para asegurar que el contenido de un encabezado se procese solo una vez:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

Así es como funciona: #ifndef MATH_UTILS_H comprueba si el símbolo MATH_UTILS_H no ha sido definido aún. Si no lo ha sido, el preprocesador continúa e inmediatamente lo define con #define MATH_UTILS_H. Todo lo que se encuentra entre este punto y #endif se incluye en la compilación.

La segunda vez que se incluye este encabezado, MATH_UTILS_H ya está definido, por lo que se omite todo el bloque. El nombre de la guarda suele ser el nombre del archivo en mayúsculas, con guiones bajos sustituyendo a los puntos y caracteres especiales.

Cada archivo de cabecera que crees debe tener guardas de inclusión. Esta es una práctica estándar que evita errores de compilación y hace que tu código sea seguro de incluir desde cualquier parte de tu proyecto.

challenge icon

Desafío

Fácil

Protejamos un archivo de encabezado contra la inclusión doble añadiendo guardas de inclusión. Partirás de la utilidad de saludo de la lección anterior, pero esta vez te asegurarás de que el encabezado se pueda incluir varias veces sin problemas.

Crearás dos archivos:

  • greet.h: Tu archivo de encabezado que contiene la declaración de la función greet. Esta vez, envuelve todo el contenido con guardas de inclusión usando el símbolo GREET_H.
  • main.c: Tu archivo principal que incluye el encabezado, implementa la función greet y la llama desde main().

La función greet debe aceptar un parámetro const char* para el nombre e imprimir:

Hello, Alice!

Tu archivo de encabezado debe seguir esta estructura:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Recibirás una entrada: un nombre (cadena).

Imprime el mensaje de saludo exactamente como se muestra en el formato anterior, reemplazando Alice por el nombre proporcionado.

Pruébalo tú mismo

#include <stdio.h>
#include "greet.h"

// TODO: Implementa la función greet que imprima "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Llama a la función greet con el name
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online