Contrôle de compilation par #if

On peut contrôler ce qui sera compilé effectivement ou non, avec une clause adéquate. Si l’on écrit :

#if condition .....#endif

la condition, qui doit être une constante numérique au format normal de C++, est évaluée par le préprocesseur ; si elle est non nulle, la clause #if est ignorée ; si elle vaut zéro, tout ce qui se trouve entre #if et #endif est ignoré (et donc non compilé en particulier).

On peut utiliser dans l’expression le pseudo-opérateur unaire defined qui renvoie 1 si l’identificateur qui le suit est défini (par #define comme indiqué au paragraphe précédent), et 0 sinon. Par exemple, on peut écrire (les parenthèses sont facultatives) :

#if defined(__cplusplus) && !defined(__IOSTREAM_H)......#endif

L’écriture :

#if defined(identificateur)

peut être abrégée en :

#ifdef identificateur

De même, l’écriture :

#if !defined(identificateur)

peut être abrégée en :

#ifndef identificateur

La clause #if peut avoir une clause #else, plus éventuellement des clauses intermédiaires #elif (pour else if). Voici un exemple :

#ifdef __cplusplus				inline void ecrire (char *messg){    cout << messg; }				#elif defined(_VIDEO)				void ecrire(char *messg){     gotoxy(1, 25);     printf("%s", messg);     clreoln();}#else#define ecrire(messg) printf("%s", messg);#endif

Les clauses de compilation conditionnelles peuvent être imbriquées comme les clauses if en C++.

Précédent Précédent Sommaire Sommaire Suivant Suivant