◐ Shell
clean mode source ↗

Conditional inclusion - cppreference.com

Da cppreference.com.

Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.

La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui.

Click here for the English version of this page

<metanoindex/>

Il preprocessore supporta la compilazione condizionale di parti del file di origine. Questo comportamento è controllato da #if, #else, #elif, #ifdef, #ifndef e #endif direttive.

Original:

The preprocessor supports conditional compilation of parts of source file. This behavior is controlled by #if, #else, #elif, #ifdef, #ifndef and #endif directives.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Sintassi

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

Spiegazione

Il blocco di pre-elaborazione condizionale inizia con #if, #ifdef o direttiva #ifndef, quindi include facoltativamente un numero qualsiasi di direttive #elif, quindi include opzionalmente al massimo una direttiva #else e termina con la direttiva #endif. I blocchi interni di pre-elaborazione condizionali sono trattati separatamente.

Original:

The conditional preprocessing block starts with #if, #ifdef or #ifndef directive, then optionally includes any number of #elif directives, then optionally includes at most one #else directive and is terminated with #endif directive. Any inner conditional preprocessing blocks are processed separately.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Ognuno di #if, #elif, #else, #ifdef e #ifndef blocco di controllo direttive del codice fino al primo #elif, #else, direttiva #endif non appartenenti ad alcuna blocchi interni di pre-elaborazione condizionali.

Original:

Each of #if, #elif, #else, #ifdef and #ifndef directives control code block until first #elif, #else, #endif directive not belonging to any inner conditional preprocessing blocks.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#if, #ifdef e #ifndef direttive testare la condizione specificata (vedi sotto) e se restituisce true, compila il blocco di codice controllato. In tal caso, la successiva #else e le direttive #elif vengono ignorati. In caso contrario, se la condizione specificata restituisce false, il blocco di codice controllato viene saltato e la successiva #else o #elif direttiva (se presente) viene elaborato. Nel primo caso, il blocco di codice controllato dalla direttiva #else è incondizionatamente compilato. In quest'ultimo caso, la direttiva #elif comporta come se fosse direttiva #if: verifica la condizione, compila o salta il blocco di codice controllato in base al risultato, e in quest'ultimo caso successivi processi #elif e #else direttive. Il blocco di pre-elaborazione condizionale viene terminato dalla direttiva #endif.

Original:

#if, #ifdef and #ifndef directives test the specified condition (see below) and if it evaluates to true, compiles the controlled code block. In that case subsequent #else and #elif directives are ignored. Otherwise, if the specified condition evaluates false, the controlled code block is skipped and the subsequent #else or #elif directive (if any) is processed. In the former case, the code block controlled by the #else directive is unconditionally compiled. In the latter case, the #elif directive acts as if it was #if directive: checks for condition, compiles or skips the controlled code block based on the result, and in the latter case processes subsequent #elif and #else directives. The conditional preprocessing block is terminated by #endif directive.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Condizione valutazione

#if, #elif

Il expression è un'espressione costante, utilizzando letterali solo e identificatori, definita utilizzando direttiva #define. Qualsiasi identificatore, che non è letterale, non definita utilizzando direttiva #define, restituisce 0.

Original:

The expression is a constant expression, using only letterali and identifiers, defined using #define directive. Any identifier, which is not literal, non defined using #define directive, evaluates to 0.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

L'espressione può contenere operatori unari in forma defined identifier o defined (identifier) che restituiscono 1 se il identifier è stata definita utilizzando direttiva #define e 0 altrimenti. Se il expression restituisce valore diverso da zero, il blocco di codice controllato è incluso e saltato altrimenti. Se qualsiasi identificatore utilizzato non è una costante, viene sostituito con 0.

Original:

The expression may contain unary operators in form defined identifier or defined (identifier) which return 1 if the identifier was defined using #define directive and 0 otherwise. If the expression evaluates to nonzero value, the controlled code block is included and skipped otherwise. If any used identifier is not a constant, it is replaced with 0.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#ifdef, #ifndef

Controlla se l'identificatore è stato definito con direttiva #define.

Original:

Checks if the identifier was defined using #define directive.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#ifdef identifier è sostanzialmente equivalente a #if defined( identifier).

Original:

#ifdef identifier is essentially equivalent to #if defined( identifier).

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#ifndef identifier è sostanzialmente equivalente a #if !defined( identifier).

Original:

#ifndef identifier is essentially equivalent to #if !defined( identifier).

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Esempio

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

Output: