Menu
Coddy logo textTech

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 includono l’uno l’altro. Le protezioni contro le inclusioni risolvono questo problema.

Una guardia di inclusione usa tre direttive del preprocessore per garantire che il contenuto di un file 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 controlla se il simbolo MATH_UTILS_H non è ancora stato 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 protezioni per l'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 header dalle inclusioni multiple aggiungendo delle guardie di inclusione. Partirai dall'utility di saluto della lezione precedente, ma questa volta ti assicurerai che l'header possa essere incluso più volte in sicurezza.

Creerai due file:

  • greet.h: il tuo file header 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'header, implementa la funzione greet e la chiama da main().

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

Hello, Alice!

Il tuo file header 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 sopra, sostituendo Alice con il nome fornito.

Provalo tu

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

// TODO: Implementa la funzione greet che stampa "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Chiama la funzione greet passando il nome
    
    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