[ Web Proxy ]
URL:
Viewing: https://fr.cppreference.com/cpp/preprocessor/conditional [Back]  [Original]

Inclusion conditionnelle cppreference.com
cppreference.com
Espaces de noms
Variantes

Inclusion conditionnelle

De cppreference.com
 
 
Langage C++
Sujets gnraux
Contrle de flux
Instructions conditionnelles
Instructions d'itration
Instructions de saut
Fonctions
dclaration de fonction
expression lambda
fonction gnrique
spcificateur inline
spcification d'exception (obsolte)
spcificateur noexcept (C++11)
Exceptions
Espaces de noms
Types
spcificateur decltype (C++11)
Qualificatifs
qualificatifs const et volatile
qualificatifs de stockage
qualificatif constexpr (C++11)
qualificatif auto (C++11)
qualificatif alignas (C++11)
Initialisation
Littraux
Expressions
oprateurs alternatifs
Utilitaires
Types
dclaration typedef
dclaration d'alias de type (C++11)
attributs (C++11)
Jette
Original:
Casts
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
conversions implicites
conversion const_cast
conversion static_cast
conversion dynamic_cast
conversion reinterpret_cast
conversions style C et style fonction
Allocation de mmoire
Classes
Qualificatifs spcifiques aux membres de classe
Fonctions membres spciales
Modles
classes gnriques
fonctions gnriques
spcialisation de modles
paquets de paramtres (C++11)
Divers
Assembleur
 
 

Le prprocesseur permet la compilation conditionnelle de certaines parties du fichier source. Ce comportement est contrl par les directives #if, #else, #elif, #ifdef, #ifndef et #endif.

Syntaxe

#if expression
#elif expression
#ifdef expression
#ifndef expression
#else
#endif

Explication

Le bloc prprocesseur d'inclusion conditionnelle commence par #if, #ifdef ou #ifndef et se termine par la directive #endif. Il peut comprendre un certain nombre de directives #elif, et ventuellement une unique directive #else. Tous les blocs d'inclusion conditionnelle internes sont traits sparment.

Chacune des directives #if, #elif, #else, #ifdef et #ifndef opre jusqu' la prochaine directive #elif, #else ou #endif n'appartenant pas un bloc conditionnel prprocesseur interne.

Les directives #if, #ifdef et #ifndef testent la condition spcifie (voir ci-dessous) et si elle est value vrai, le bloc de code correspondant est compil. Dans ce cas, le code prsent entre la prochaine directive #else ou #elif et la directive #endif correspondante est ignor. Au contraire, si la condition est value faux, le bloc de code correspondant est ignor et les directives #else ou #elif suivantes sont traites (si elles sont prsentes). Dans le premier cas, le bloc de code correspondant la directive #else est toujours compil. Dans le second, la directive #elif agit comme un #if: la condition est vrifie, le bloc de code compil ou ignor selon le rsultat, et les directives #elif et #else suivantes sont traites. Dans tous les cas, le bloc d'inclusion conditionnelle se termine par la directive #endif.

valuation de l'tat

#if, #elif

expression est une expression constante, utilisant seulement les identifiants dfinis en utilisant la directive #define et les littraux. Tout identifiant qui n'est pas un littral et qui n'est pas dfini avec la directive #define est valu 0.

L'expression peut contenir les oprateurs unaires sous la forme defined identifiant ou defined (identifiant) qui renvoient 1 si identifiant a t dfini (en utilisant #define) et 0 autrement. Le bloc de code correspondant est ignor si expression est value la valeur zro ; il est inclus dans le cas contraire. Si un identifiant utilis n'est pas une constante, il est remplac par 0.

#ifdef, #ifndef

Vrifie si l'identifiant a t dfini en utilisant la directive #define.

#ifdef identifier est quivalent #if defined( identifiant).

#ifndef identifier est quivalent #if !defined( identifiant).

Exemple

#define ABCD 2
#include <iostream>

int main()
{

#ifdef ABCD
    std::cout << "1: yes\n";
#else
    std::cout << "1: no\n";
#endif

#ifndef ABCD
    std::cout << "2: no1\n";
#elif ABCD == 2
    std::cout << "2: yes\n";
#else
    std::cout << "2: no2\n";
#endif

#if !defined(DCBA) && (ABCD < 2*4-3)
    std::cout << "3: yes\n";
#endif
}

Rsultat :

1: yes
2: yes
3: yes

Web Proxy Viewer  |  New URL  |  Original Page