Menu
CoddyTech

Gardes d'inclusion

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 2 sur 61.

Lorsqu’un fichier d’en-tête est inclus plusieurs fois dans un projet, le compilateur voit les mêmes déclarations à répétition, ce qui provoque des erreurs. Cela se produit souvent lorsque plusieurs fichiers incluent le même en-tête ou lorsque des en-têtes s’incluent mutuellement. Les gardes d’inclusion résolvent ce problème.

Une garde d’inclusion utilise trois directives de préprocesseur pour garantir que le contenu d’un en-tête est traité une seule fois :

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

Voici comment cela fonctionne : #ifndef MATH_UTILS_H vérifie si le symbole MATH_UTILS_H n’a pas encore été défini. Si ce n’est pas le cas, le préprocesseur continue et le définit immédiatement avec #define MATH_UTILS_H. Tout ce qui se trouve entre ce point et #endif est inclus dans la compilation.

La deuxième fois que cet en-tête est inclus, MATH_UTILS_H est déjà défini, donc tout le bloc est ignoré. Le nom de la garde est généralement le nom du fichier en majuscules, avec des traits de soulignement à la place des points et des caractères spéciaux.

Chaque fichier d’en-tête que vous créez doit comporter des gardes d’inclusion. C’est une pratique standard qui évite les erreurs de compilation et permet d’inclure votre code sans risque partout dans votre projet.

challenge icon

Défi

Facile

Protégeons un fichier d’en-tête contre les inclusions multiples en ajoutant des gardes d’inclusion. Tu vas reprendre l’utilitaire de salutation de la leçon précédente, mais cette fois, assure-toi que le fichier d’en-tête peut être inclus plusieurs fois sans problème.

Tu vas créer deux fichiers :

  • greet.h : ton fichier d’en-tête contenant la déclaration de la fonction greet. Cette fois, encadre tout son contenu avec des gardes d’inclusion utilisant le symbole GREET_H.
  • main.c : ton fichier principal qui inclut le fichier d’en-tête, implémente la fonction greet et l’appelle depuis main().

La fonction greet doit accepter un paramètre const char* pour le nom et afficher :

Hello, Alice!

Ton fichier d’en-tête doit respecter cette structure :

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Tu recevras une entrée : un nom (chaîne de caractères).

Affiche le message de salutation exactement comme indiqué dans le format ci-dessus, en remplaçant Alice par le nom fourni.

Essayez vous-même

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

// TODO: Implémentez la fonction greet qui affiche "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: Appelez la fonction greet avec le nom
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne