A C nyelvi feltételes fordítás lehetõségét szintén a preprocesszor biztosítja. Ennek általános formája:
#if feltétel
...
#elif feltétel
...
#else
...
#endif
ahol a feltétel konstans értéke vagy igaz
(nem nulla), vagy hamis (nulla). Az #elif ágból
tetszõleges számú lehet, akár el is maradhat,
csakúgy, mint az #else ág. Ha az elsõ feltétel
nem teljesül, akkor az elõfeldolgozó a #if
utasítást követõ elsõ #elif,
#else, illetve #endif direktíváig terjedõ
sorokat figyelmen kívül hagyja - tehát ezekben szerepelhetnek
akár szintaktikailag hibás C utasítások is
-, és a következõ #elif utasítást
veszi hasonlóképpen, ha van. Ha egyik feltétel sem
teljesül, és van #else ág, akkor csak az abban
szereplõ sorok kerülnek további feldolgozásra.
Ha valamelyik feltétel igaz volt, akkor az adott ágat követõ
elsõ #elif vagy #else utasítástól
- ha van ilyen - a megfelelõ #endif-ig terjedõ sorok
lesznek "eldobva". A feltételes fordítású részek
tetszõleges mélységben egymásba ágyazhatók,
például:
#if ALFA < 3 ... #if defined(BETA) ... #else ... #endif ... #elif ALFA < 10 ... #endifA defined(szimbólum) alakú kifejezés értéke akkor igaz, ha az adott szimbólum - tetszõleges értékkel - definiálva van, egyébként hamis. Az #if defined(szimbólum) a következõ alakban is írható: #ifdef szimbólum, illetve a feltétel negáltjának megfelelõen létezik #ifndef szimbólum alakú utasítás is.