#if defined macroName
#if ! defined macroName
#ifdef macroName
#ifndef macroName
L'instruction #if
est utilisée pour réaliser ce que l'on appelle de la compilation conditionnelle : cela veut
dire que certaines sections de code pourront être, ou non, compilée en fonction de l'existance ou la non existance d'une
macro. Par exemple, il vous est possible d'avoir un même fichier de code qui puisse compiler soit sous plates-formes Windows,
soit sous plates-formes Unix/Linux : pour autant des appels différents pourront être réalisés aux fonctions du systèmes
d'exploitation considéré.
Ce mécanisme ne présuppose pas qu'une valeur soit affectée à la macro. Seule la connaissance de son existance importe.
Comme vous pouvez le voir ci-dessus, il existe en fait plusieurs variantes possibles pour arriver au même résultat. Si vous
chercher à tester l'existance du macro, vous pouvez alors utiliser les constructions #if defined macroName
ou
#ifdef macroName
. Si, au contraire, vous cherchez à tester la non-existance d'une macro, utilisez plutôt les
constructions #if ! defined macroName
ou #ifndef macroName
.
Dans tous les cas, il est possible de dire quoi faire si condition n'est pas remplie : utilisez l'instruction #else
à cet effet. Il vous est aussi possible d'utiliser #elif
pour ajouter une nouvelle condition à votre instruction
de compilation conditionnelle. La porté du #if
et de son éventuel #else
(ou #elif
)
doit arrêté via l'utilisation de l'instruction #endif
.
Il est aussi à noter, que le mécanisme de compilation conditionnelle permet de mettre en oeuvre une protection contre des inclusions multiples d'un même .h (un fichier d'entête). Le principe est basé sur le fait que lorsqu'un fichier sera inclue pour la première fois, il définira alors une macro qui empèchera son inclusion une seconde fois. Par contre, avant la première inclusion, la macro est alors non définie. Voici un petit exemple : le nom de la macro utilisé doit être unique par fichier .h.
#ifndef __A_FILENAME__ #define __A_FILENAME__ /* file declarations */ #endif
#include <stdio.h> int main() { #ifdef WIN32 /* Only defined on Windows platforms */ printf( "You are on a Windows platform\n" ); #else /* Probably a Unix/Linux platform */ printf( "You are not on a Windows platform\n" ); #endif return 0; }
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :