Az #if, #elif, #else és #endif (c
A forrásfájlban minden #if irányelvnek megfelelő záró irányelvnek kell lennie. A #if és a #endif irányelvek között #elif irányelveket lehet elhelyezni. Azonban legfeljebb egy #else irányelv megengedett. A #else irányelv. ha jelen van, az utolsó a #endif irányelv előtt.
Irányelvek #if. #elif. #else és #endif beilleszthetők a #if irányelvek más szövegrészébe. Minden beágyazott irányelv #else. #elif vagy #endif hivatkozik a legközelebbi előző #if irányelvre.
Minden feltételes összeállítási irányelv, például #if és #ifdef. a fájl végéig megfelelő záró irányelveknek kell lenni #endif; ellenkező esetben hibaüzenet jelenik meg. Ha a feltételes összeállításra vonatkozó irányelveket a csatolt fájlok tartalmazzák, akkor ugyanazoknak a feltételeknek kell megfelelniük: a mellékelt fájl végén nem szabad párosítatlan feltételes összeállításra vonatkozó irányelv.
A #elif parancsot követő parancssorban. makrohelyettesítést hajtanak végre, így a makró hívásokat állandó kifejezés kifejezéssel lehet használni.
Az előfeldolgozó kiválasztja a megadott szöveges paraméterek egyikét a további feldolgozáshoz. A szövegparaméterben megadott blokk. lehet bármilyen szövegsorozat. Több sorba is beletelhet. Jellemzően a szöveg a program szövege, érthető a fordítóhoz vagy előfeldolgozóhoz.
Az előfeldolgozó feldolgozza a kijelölt szövegblokkot, és átadja azt a fordítónak. Ha egy szövegblokk tartalmaz előfeldolgozói irányelveket, az előfeldolgozó ezeket az irányelveket hajtja végre. Csak az előfeldolgozó által kiválasztott szövegblokkok kerülnek összeállításra.
Az előfeldolgozó egy szöveges elemet választ ki. az #if vagy # elif direktívát követve az állandó kifejezéseket. amíg egy true (nonzero) értékű kifejezést talál. Az összes szöveget (beleértve a # karakterrel kezdődő egyéb preprocesszoros irányelveket is) a megfelelő #elif irányelvhez választják ki. #else vagy #endif.
Ha az állandó kifejezés összes előfordulása hamis vagy nincs #elif direktívák jelen vannak. az előfeldolgozó a #else mondatot követően kiválaszt egy szövegblokkot. Ha a #else mondat el van hagyva, és a #if mondatban az állandó kifejezés összes példánya hamis, akkor nincs szövegblokk.
A konstans kifejezés egy egész konstans kifejezés az alábbi további korlátozásokkal:
Az kifejezéseknek egész számot kell tartalmazniuk, és csak egész számokat, karakterállandókat és egy meghatározott operátort tartalmazhatnak.
A kifejezés nem teszi lehetővé az operátor sizeof vagy az öntött operátor használatát.
Előfordulhat, hogy a célkörnyezet nem képes az összes egész tartományra kiterjedni.
Az átalakítás típusa int. ami ugyanaz, mint a hosszú. és írja be az unsigned int. amely ugyanaz, mint az alá nem írt hosszú.
A fordító képes átalakítani a karakterállandókat egy olyan kódérték-készletre, amely eltér a célkörzet beállításaitól. A célkörnyezet tulajdonságainak meghatározásához ellenőrizze a makró értékeket a program LIMITS.H fájlban, amelyet a célkörnyezetre fordított.
A kifejezésnek nem szabad semmilyen környezetvédelmi kérelmet végrehajtania, és nem függhet a célszámítógép konkrét megvalósításától.
Az előfeldolgozó által definiált operátor speciális konstans kifejezésekben használható, amint az a következő szintaxisban látható:
Ez az állandó kifejezés igaznak tekinthető (nem nulla), ha az azonosító jelenleg definiálva van; egyébként a feltétel hamis (0). Az üres szövegként definiált azonosító kifejezettnek tekintendő. A meghatározott irányelv csak a #if és #elif irányelvekben használható.
A következő példában a #if és a #endif irányelvek hívást kezdeményeznek a 3 funkció közül:
A CREDIT meghatározása esetén a hitelezési funkció hívása összeállítható. Ha DEBIT azonosító van megadva. a terhelési funkció hívása összeáll. Ha egyik ilyen azonosító sem kerül megadásra, akkor a printerror funkcióhívás összeáll. Megjegyezzük, hogy a C és a C ++ esetében a CREDIT és a hitel azonosító különböző azonosító, mivel más karakterek vannak.
A következő példában a feltételes kompilációs operátorok egy korábban definiált karakterstabilitást használnak a DLEVEL néven.
Az #if első blokk 2 egymásba ágyazott #if direktívát tartalmaz. #else és #endif. Az első irányelvek csak akkor kerülnek feldolgozásra, ha a DLEVEL> 5 feltétel teljesül, ellenkező esetben a #else irányelv után található operátorok feldolgozhatók.
A második példa #elif és #else direktívái a DLEVEL konstans értékétől függően választják ki a négy opció egyikét. A STACK konstans értéke 0, 100 vagy 200, a DLEVEL konstans definíciójától függően. Ha a DLEVEL nagyobb, mint 5, az operátor összeáll
és az állandó STACK meghatározatlan marad.
A feltételes összeállítást általában azért használják, hogy megakadályozza ugyanazon fejlécfájl több befoglalását. A C ++-ban, ahol az osztályokat gyakran definiálják a fejlécfájlok, az alábbihoz hasonló konstrukciók felhasználhatók többféle definíció kizárására.
Az előző kód megvizsgálja, hogy az EXAMPLE_H karakterkonzuláció definiálva van-e. Ha meg van adva, a fájl már szerepel, és nem szükséges újra feldolgozni. Ha nem, az EXAMPLE_H állandó meg van határozva, hogy az EXAMPLE.H fájlt már feldolgoztuk.