Menu
CoddyTech

Guardie di inclusione

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 2 di 61.

Quando un file header viene incluso più volte in un progetto, il compilatore vede ripetutamente le stesse dichiarazioni, causando errori. Questo accade comunemente quando più file includono lo stesso header o quando gli header si includono a vicenda. Le protezioni contro le inclusioni multiple risolvono questo problema.

Una guardia di inclusione usa tre direttive del preprocessore per assicurarsi che il contenuto di un header venga elaborato una sola volta:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

Ecco come funziona: #ifndef MATH_UTILS_H verifica se il simbolo MATH_UTILS_H non è stato ancora definito. Se non lo è, il preprocessore continua e lo definisce immediatamente con #define MATH_UTILS_H. Tutto ciò che si trova tra questo punto e #endif viene incluso nella compilazione.

La seconda volta che questo header viene incluso, MATH_UTILS_H è già definito, quindi l’intero blocco viene saltato. Il nome della guardia è in genere il nome del file in maiuscolo, con i punti e i caratteri speciali sostituiti da trattini bassi.

Ogni file header che crei dovrebbe avere delle guardie di inclusione. È una pratica standard che previene gli errori di compilazione e rende il tuo codice sicuro da includere ovunque nel tuo progetto.

challenge icon

Sfida

Facile

Proteggiamo un file di intestazione dalle inclusioni doppie aggiungendo delle guardie di inclusione. Partirai dall'utilità di saluto della lezione precedente, ma questa volta assicurati che l'intestazione possa essere inclusa più volte senza problemi.

Creerai due file:

  • greet.h: il tuo file di intestazione contenente la dichiarazione della funzione greet. Questa volta, racchiudi l'intero contenuto tra guardie di inclusione usando il simbolo GREET_H.
  • main.c: il tuo file principale, che include l'intestazione, implementa la funzione greet e la richiama da main().

La funzione greet deve accettare un parametro const char* per il nome e stampare:

Hello, Alice!

Il tuo file di intestazione deve seguire questa struttura:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Riceverai un input: un nome (stringa).

Stampa il messaggio di saluto esattamente come mostrato nel formato qui sopra, sostituendo Alice con il nome fornito.

Provalo tu

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

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

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

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online