#define direktíva

#define <идентификатор> <текст>

#define <идентификатор> <список параметров> <текст>

#define irányelv felváltja az összes előfordulást <идентификатора> a forrás fájlban <текст>, követően irányelvre <идентификатором>. Ezt a folyamatot nevezik Macro, <идентификатор> Ez helyettesíti, ha ez egy külön jelzőt. Például, ha <идентификатор> része egy hosszabb szöveg, vagy azonosítója, akkor nem kell pótolni. Ha <идентификатором> kell, hogy legyen <список параметров>, Az irányelv meghatározza a makró érveket.

<Текст> Ez egy sor tokenek, mint például a kulcsszavak, állandók, azonosítók vagy kifejezéseket. Egy vagy több szóköz karaktert kell választani <текст> -tól <идентификатора> (Vagy zárójelbe paraméterek). Ha a szöveg nem fér el egy sorban, akkor folytatódik a következő sorban; Ehhez írja be a végén a szöveg backslash közvetlenül követi az ENTER.

<Текст> Ez lehet hagyni. Ebben az esetben az összes példány <идентификатора> Ezek eltávolítják a forráskódot. Ennek ellenére <идентификатор> minősül határozott és ellenőrzése #ha irányelv értéket ad 1 (lásd 7.4.1).

<Список параметров>, ha jelen van, tartalmaz, egy vagy több azonosítót vesszővel elválasztva. Azonosítók a lista eltér egymástól. Körük korlátozott makrók, ahol kapnak. A listát kell zárójelbe téve. A nevét a formális paraméterek a <тексте> tudomásul veszi a helyzetbe, amelyben a helyettesített tényleges érvek egy makró hívást. Minden formális paraméter neve megjelenhet <тексте> tetszőleges számú alkalommal.

A makró hívás után <идентификатором> Meg van írva a zárójelben listája tényleges érvek megfelelő formális paraméterei <списка параметров>. <Текст> Úgy módosítjuk úgy minden formális paraméter megfelelő tényleges érv. Felsorolja a tényleges érvek és formális paramétereket kell tartalmaznia azonos számú elemet.

Megjegyzés. Nem tévesztendő helyettesítése érveket a makró az átviteli függvény érveket. Csere az előfeldolgozó tisztán szöveges karaktert. Bármilyen típusú számítás vagy az átalakulás nem megy végbe.

Már említettük, hogy a makrók tartalmazhatnak egynél több előfordulása egy formális paraméter. Ha a formális paraméter reprezentálja egy kifejezés egy mellékhatás, ezt a kifejezést fogják értékelni többször, és vele együtt minden alkalommal, és lesz egy mellékhatása. Az eredmény ebben az esetben lehet hibás.

belül <текста> A #define direktíva ágyazhatók nevei más makrók és konstansok. Az expanzió csak akkor kerül végrehajtásra expanzió közben <идентификатора> azt <текста>, és nem a meghatározás #define direktíva. Meg kell vizsgálni, különösen a kölcsönhatás a beágyazott elemzi állandók és makrók az irányelv #undef. A hosszabbítás tartalmazó szövegben szerepel, akkor lehet, hogy már hatályon kívül helyezett irányelv #undef.

nem vezet végtelen hurkok előfeldolgozó.

#define Szélesség 80

#define HOSSZ (szélesség + 10)

#define FILEMESSAGE „A kísérlet, hogy hozzon létre egy fájlt

Ez nem sikerült hiánya miatt disk space "

#define REG1 regiszter

#define REG2 regiszter

#define MAX (x, y) ((x)> (y)). (X). (Y)

#define MULT (a, b) ((a) * (b))

Az első példában a WIDTH azonosítót úgy definiáljuk, mint egy egész konstans a 80 értéket, és azonosító hosszának - a szöveges (szélesség + 10). Minden bejegyzés hosszúság azonosítót az eredeti fájlt fogja helyettesíteni a szövegben (szélesség + 10), amely expanzió után WIDTH ID fog fordulni, hogy a kifejezés (80 + 10). Konzolok környező szöveget (szélesség + 10), hibák elkerülhetők kimutatásokat, mint például a következők:

Miután előfeldolgozás szereplő formájában:

Az érték, amelyet az var, egyenlő 1800. hiányában kapcsok makró definíció nyilatkozat lett volna az alábbiak szerint:

Var értékű 280, mivel a szorzás művelet magasabb elsőbbséget, mint az adagolás operátor.

A második példában definiáljuk FILEMESSAGE azonosítója. A definíció kiterjed a második sorban kihasználva a backslash karakter előtt közvetlenül az ENTER gomb megnyomásával.

A harmadik példa szerint három azonosító REG1, REG2, reg3. REG1 és REG2 azonosítók meghatározott kulcsszavak regisztráljon. Meghatározása reg3 elhagyjuk, és így bármilyen esemény reg3 törlődik a forrás fájlt. 7.4.1 példája mutatja, hogy ezek az irányelvek az lehet megadni a tárolási osztály regisztrálja a legfontosabb változók a program.

Egy negyedik példa definiál makro MAX. Minden bejegyzés MAX azonosítót a forrás file helyébe a kifejezést ((x)> (y))? (X) :( y), amely ahelyett, hogy a formális paraméterek x és y helyébe a tényleges. Például makróhívást

szövegrész helyébe az

szövegrész helyébe az

Megjegyzendő, hogy ez a makró definíció érvek mellékhatások hibás eredményekhez vezetnek. Például makróhívást

szövegrész helyébe az

Operandusok művelet> lehet számítani, bármilyen sorrendben, és az értéke az i változó függ a kiértékelés. Ezért a kifejezést az eredmény megjósolhatatlan. Emellett lehetséges, hogy ha a változó i-t növeljük kétszer, ami valószínűleg nem szükséges.

Az ötödik példa a meghatározott makrók mult. Macrocall MULT (3,5) a programban helyébe (3) * (5). Zárójelben az aktuális argumentumok, amelyek szükségesek abban az esetben, ha az érvek összetett makró kifejezések. Például makróhívást

helyébe (3 + 4) * (5 + 6), ami megegyezik 76. hiányában kapcsok eredményeként helyett 3 + 4 * 5 + 6 egyenlő lenne 29.

Share az oldalon