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 se répéter, ce qui provoque des erreurs. Cela se produit souvent lorsque plusieurs fichiers incluent le même fichier d’en-tête, ou lorsque des fichiers d’en-tête s’incluent mutuellement. Les gardes d’inclusion résolvent ce problème.
Un garde d'inclusion utilise trois directives de préprocesseur pour garantir que le contenu d'un en-tête n'est traité qu'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 le bloc entier est ignoré. Le nom de la garde est généralement le nom du fichier en majuscules, avec des tirets bas remplaçant les points et les caractères spéciaux.
Chaque fichier d’en-tête que vous créez devrait avoir des gardes d’inclusion. Il s’agit d’une pratique standard qui évite les erreurs de compilation et permet d’inclure votre code depuis n’importe quel emplacement de votre projet en toute sécurité.
Défi
FacileProtégeons un fichier d’en-tête contre les inclusions multiples en ajoutant des gardes d’inclusion. Tu t’appuieras sur l’utilitaire de salutation de la leçon précédente, mais cette fois, assure-toi que l’en-tête peut être inclus plusieurs fois sans danger.
Tu vas créer deux fichiers :
greet.h: ton fichier d’en-tête contenant la déclaration de la fonctiongreet. Cette fois, encadre tout le contenu avec des gardes d’inclusion utilisant le symboleGREET_H.main.c: ton fichier principal qui inclut l’en-tête, implémente la fonctiongreetet l’appelle depuismain().
La fonction greet doit accepter un paramètre const char* correspondant au nom et afficher :
Hello, Alice!Ton fichier d’en-tête doit respecter cette structure :
#ifndef GREET_H
#define GREET_H
// function declaration here
#endifTu recevras une entrée : un nom (chaîne de caractères).
Affiche exactement le message de salutation dans le format indiqué ci-dessus, en remplaçant Alice par le nom fourni.
Essayez vous-même
#include <stdio.h>
#include "greet.h"
// TODO: Implémenter la fonction greet qui affiche "Hello, <name>!"
int main() {
char name[100];
scanf("%s", name);
// TODO: Appeler la fonction greet avec le name
return 0;
}
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
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne