Participer au site avec un Tip
Rechercher
 

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 :

Instructions du preprocesseur #if, #ifdef et #ifndef

L'instruction #define L'instruction #include


Syntaxe générale

#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

Exemple de code

#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;
}

Sujets connexes

Le preprocesseur C
#define
#undef


L'instruction #define L'instruction #include