0Pricing
C Academy · Leçon

Compilation conditionnelle

ifdef et macros

Compilation conditionnelle est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.

Le préprocesseur

Avant même que le compilateur ne voie votre code, le préprocesseur s’exécute. Il traite chaque ligne commençant par # : inclusions, macros et conditions.

La compilation conditionnelle vous permet d’inclure ou d’exclure des blocs de code selon des conditions évaluées à cette étape, afin de produire différentes versions à partir d’une même source.

Définir des macros

#define crée une macro. Sans valeur, il s’agit simplement d’un indicateur que vous pourrez tester plus tard.

Les macros de type objet remplacent un nom par du texte ; les indicateurs signalent simplement qu’un élément est défini.

#define MAX_USERS 100   /* value macro */
#define DEBUG          /* flag macro */

ifdef et ifndef

#ifdef NAME conserve le bloc uniquement si NAME est défini. #ifndef le conserve uniquement si NAME n’est pas défini.

Ici, l’affichage de débogage n’existe que dans les versions de débogage. Si DEBUG n’est pas défini, le compilateur ne voit même jamais cette ligne.

#include <stdio.h>
#define DEBUG

int main(void) {
#ifdef DEBUG
    printf("debug: starting\n");
#endif
    printf("running\n");
    return 0;
}

if, elif, else

#if évalue une expression entière constante. Combinez-le avec #elif et #else pour effectuer une sélection parmi plusieurs possibilités.

Cela sélectionne le code en fonction d’une macro contenant un numéro de version.

#include <stdio.h>
#define VERSION 2

int main(void) {
#if VERSION >= 2
    printf("new feature on\n");
#else
    printf("legacy mode\n");
#endif
    return 0;
}

L’opérateur defined

Dans #if, vous pouvez tester si une définition existe avec defined(NAME), et combiner les tests avec && et ||.

Cette solution est plus flexible que #ifdef, qui ne peut tester qu’un seul nom.

#if defined(LINUX) && !defined(EMBEDDED)
    /* desktop Linux code */
#endif

Définir à la compilation

Vous n’avez pas besoin d’inscrire les macros en dur. L’option -D les définit sur la ligne de commande.

C’est ainsi que les systèmes de compilation activent ou désactivent des fonctionnalités sans modifier le code source. -DDEBUG équivaut à #define DEBUG au début de chaque fichier.

gcc -DDEBUG -DVERSION=3 -o app app.c

Détection de la plateforme

Les compilateurs prédéfinissent des macros décrivant la cible. Vous les utilisez pour écrire du code portable.

  • _WIN32 — Windows (32 ou 64 bits)
  • __linux__ — Linux
  • __APPLE__ — macOS / iOS

Utilisez ces conditions pour appeler l’API adaptée à chaque plateforme.

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
#endif

Gardes d’inclusion des fichiers d’en-tête

L’utilisation classique des conditions est la garde d’inclusion, qui empêche le traitement d’un fichier d’en-tête deux fois.

La première inclusion définit la macro de garde ; les inclusions suivantes ignorent le contenu, car la macro est déjà définie.

#ifndef UTILS_H
#define UTILS_H

int add(int a, int b);

#endif /* UTILS_H */

Désactiver du code par commentaire

#if 0 ... #endif désactive de manière fiable un bloc, même si celui-ci contient déjà des commentaires.

Contrairement à /* */, cette construction s’imbrique correctement ; c’est donc la méthode standard pour exclure temporairement du code pendant le débogage.

#if 0
    legacy_function();   /* disabled for now */
    /* with internal comments too */
#endif

Examiner la sortie du préprocesseur

Pour voir exactement ce que le compilateur va compiler, exécutez uniquement le préprocesseur avec -E.

Cette option développe toutes les inclusions, macros et conditions, ce qui est particulièrement utile lorsqu’une macro se comporte mal.

gcc -E app.c | less

Commutateurs de fonctionnalités en pratique

Un schéma courant consiste à utiliser un seul fichier d’en-tête de configuration qui active ou désactive les fonctionnalités pour tout le projet.

Modifiez un seul #define et chaque bloc protégé de tous les fichiers réagit. Les fonctionnalités optionnelles restent ainsi clairement séparées du code central.

#include <stdio.h>
#define FEATURE_LOGGING 1

int main(void) {
#if FEATURE_LOGGING
    printf("logging enabled\n");
#endif
    printf("app ready\n");
    return 0;
}

Vérification rapide

Prévoyez le comportement d’une définition passée sur la ligne de commande.

Récapitulatif

Vous contrôlez désormais la compilation conditionnelle :

  • #ifdef/#ifndef testent si une macro est définie
  • #if/#elif/#else évaluent des expressions constantes, avec defined()
  • -DNAME définit des macros depuis la ligne de commande pour activer ou désactiver des fonctionnalités
  • Les macros de plateforme prédéfinies permettent d’écrire du code portable ; les gardes d’inclusion empêchent les inclusions multiples

Ensuite : organiser le code dans plusieurs fichiers.

Questions Fréquemment Posées

La leçon « Compilation conditionnelle » est-elle gratuite ?

Oui — le texte complet de « Compilation conditionnelle » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Compilation conditionnelle » ?

ifdef et macros Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C Academy ?

Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Compilation conditionnelle » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C Academy ?

Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Compilation conditionnelle
  2. Projets à plusieurs fichiers
  3. Makefiles
  4. Bibliothèques statiques et partagées
← Retour à C Academy