cpp/preprocessor/preprocessor if
#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