next up previous contents
Elõre: Elõredefiniált szimbólumok Fel: Az elõfeldolgozó Vissza: Megjegyzések

Feltételes fordítás

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
                ...
           #endif
A 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.