Przestrzenie nazw
Warianty
Działania

cpp/preprocessor/preprocessor if

Z cppreference.com

#if, #else, #elsif, #endif

    #if WARTOSC
    ...
    #elif WARTOSC
    ...
    #else
    ...
    #endif

Powyższe cztery dyrektywy preprocesora pozwalają na prostą kontrolę nad kodem włączanym do kompilacji, działają na podobnej zasadzie co poniższy kod w C/C++:

    if(WARTOSC) {
      ...
    } else if(WARTOSC) {
      ...
    } else {
      ...
    }

Jeśli WARTOSC jest prawdziwa (jest różna od 0) kod zawarty między komendą testującą warunek (#if/#elif/#else), a następną (#elif/#else/#endif) zostanie włączony do kompilacji. W przeciwnym wypadku zostanie wycięty (potraktowany jak komentarz):

Przykładowy kod:

    #if 1 > 3
    cout << "To nie zostanie skompilowane" << endl;
    #else
    cout << "A to juz tak" << endl;
    #endif

Po skompilowaniu wyświetli:

 A to juz tak


[edytuj] #ifdef, #ifndef

Poniższy kod sprawdza czy została zdefiniowana STALA_LUB_MAKRO, a następnie sprawdza czy __nie__została zdefiniowana STALA_LUB_MAKRO_2:

    #if defined(STALA_LUB_MAKRO)
    ...
    #endif
 
    #if !defined(STALA_LUB_MAKRO_2)
    ...
    #endif

Powyższe dyrektywy są stosowane na tyle często (np. przy dołączaniu plików nagłówkowych czy kompilacji warunkowej), że dorobiły się skróconych wersji - #ifdef oraz #ifndef. Tak że powyższy kod jest równoważny z:

    #ifdef STALA_LUB_WARTOSC
    ...
    #endif
 
    #ifndef STALA_LUB_WARTOSC_2
    ...
    #endif