c:conditions

Un article de Polydoc.

Le préprocesseur offre un ensemble de commandes de conditions :

  • #if + macro ou variable : condition
  • #ifdef + nom de macro ou variable : vérifie si cette dernière est définie
  • #ifndef + nom de macro ou variable : contraire du précèdent
  • #else : si aucune des conditions précédentes ne sont pas vérifiées
  • #elif : si la condition précédente n'est pas vérifiée
  • #endif : fin du bloc conditionnel

Elles sont très utilisées pour notamment éviter les inclusions infinies lorsqu'on fait de la programmation modulaire (avec plusieurs fichiers .h et .c) : si un fichier "a" contient un #include du fichier b, et que le fichier b contient un #include du fichier a, le préprocesseur cherchera à inclure les 2 fichiers entre eux indéfiniment, ce qui peut être évité en plaçant en haut de chaque fichier.h des directives sur ce modèle :

#ifndef DEF_FUNC
#define DEF_FUNC //Pas besoin de définir de valeur
 
#include <stdio.h>
#include "fichierB.h"
 
//[Reste du code...]
 
#endif

On peut l'utiliser également pour limiter du code à un OS particulier :

#define WINDOWS
 
//[Code portable...]
 
#idfef WINDOWS
system("PAUSE"); //La plupart des instructions system() ne sont pas portables
#endif