#if, #elif, #else et #endif (C++)
Remonter à Présentation de la compilation conditionnelle - Index
Syntaxe
#if expression-constante-1 <section-1> <#elif expression-constante-2 saut-de-ligne section-2> . . . <#elif expression-constante-n saut-de-ligne section-n> <#else <saut-de-ligne> section-finale> #endif
Description
Le compilateur met en oeuvre la compilation conditionnelle en remplaçant les lignes appropriées du code source par une ligne blanche. Les lignes ainsi ignorées sont celles qui ne sont pas à compiler (ceci étant le résultat des directives). Toutes les directives de compilation conditionnelles doivent se terminer dans le fichier source ou le fichier inclus dans lequel elles ont été commencées.
Les directives conditionnelles #if, #elif, #else et #endif fonctionnent comme les opérateurs conditionnels normaux du C. Si expression-constante-1 (soumise à un développement de macro) a une valeur différente de zéro (vrai), les lignes du code (éventuellement vides) représentées par section-1 sont traitées, que ce soit des lignes de commande du préprocesseur ou des lignes source normales et transmises au compilateur. Sinon, si expression-constante-1 a pour résultat zéro (faux), section-1 est ignorée (pas de développement de macro, ni de compilation).
En cas de valeur vrai, après le traitement de section-1, le contrôle passe à #endif (qui termine la séquence conditionnelle), puis continue avec la section-suivante. En cas de valeur fausse, le contrôle passe, le cas échéant, à la ligne #elif suivante (si elle existe) où expression-constante-2 est évaluée. Si elle est vrai, section-2 est traitée puis le contrôle passe à #endif. Sinon, si expression-constante-2 est fausse, le contrôle passe à la directive #elif suivante, et ainsi de suite jusqu'à ce que la directive #else ou #endif soit atteinte. La directive facultative #else est utilisée comme alternative si tous les tests préalables se sont avérés faux. #endif met fin à la séquence conditionnelle.
La section traitée peut contenir d'autres clauses conditionnelles imbriquées ; chaque #if doit être contrebalancé par une directive de clôture #endif.
Le résultat du scénario précédent est qu'une seule section (qui peut être vide) est transmise au traitement ultérieur. Les sections ignorées ne sont utiles que pour garder une trace des directives conditionnelles imbriquées, chaque #if étant associé à un #endif.
Les expressions constantes à tester doivent avoir pour résultat une valeur entière.