Retour au cours

Directives de préprocesseur avancées (Compilation conditionnelle)

Langage C : de Zéro à Héros - Le Guide Complet pour Débutants

Leçon 53 : Directives de préprocesseur avancées (Compilation conditionnelle)

La compilation conditionnelle permet au programmeur d'inclure ou d'exclure des blocs de code spécifiques en fonction de conditions prédéfinies (macros). C'est crucial pour la portabilité, le débogage et la gestion de différentes configurations de build.

1. #ifdef et #ifndef

  • #ifdef identifiant : Vérifie si une macro identifiant a été définie.
  • #ifndef identifiant : Vérifie si une macro identifiant n'a pas été définie.

Exemple : Activation du débogage

c #include <stdio.h>

#define DEBUG // Définir DEBUG globalement (ex: via le drapeau du compilateur -DDEBUG)

int main() { int donnees = 42; printf("Programme en cours d'exécution.\n");

#ifdef DEBUG
    // Ce code n'existe que si DEBUG est défini
    printf("[DEBUG] La valeur des données est : %d\n", donnees);
#endif

printf("Programme terminé.\n");
return 0;

}

2. #if, #elif, et #else

Vérifie si une expression entière constante est vraie (non nulle).

c #define OS_TYPE 1 // 1 pour Linux, 2 pour Windows

#if OS_TYPE == 1 #include <unistd.h> #define NOM_SYSTEME "Linux" #elif OS_TYPE == 2 #include <windows.h> #define NOM_SYSTEME "Windows" #else #define NOM_SYSTEME "Inconnu" #endif

int main() { printf("Compilation pour %s\n", NOM_SYSTEME); return 0; }

3. Gardes d'en-tête (Header Guards)

La compilation conditionnelle est utilisée dans les fichiers d'en-tête pour garantir que leur contenu n'est inclus qu'une seule fois, évitant ainsi les erreurs de redéfinition.

c // Dans mon_en-tete.h #ifndef MON_EN_TETE_H #define MON_EN_TETE_H

// Contenu de l'en-tête

#endif // MON_EN_TETE_H