Makrók a c

Makrók C nagyon fontos, de a C ++ is sokkal kevésbé használják. Az első szabály számukra: nem használja őket, ha nem muszáj. Mint megjegyezte, szinte minden makro megjeleníti a hiba, vagy a nyelv, illetve a programban. Ha a használni kívánt makrót, kérjük, olvassa el alaposan az elején a vezető a végrehajtását C előfeldolgozó.

Egyszerű makró meghatározása a következő:

#define név többi vonalon

Ha a név van jeléül, hogy helyébe a többi vonalon.

miután a bővítés:

elemzi = többi vonal

Azt is meg egy makró paraméterekkel.

#define mac (a, b) argument1: egy argument2: b

Amikor a mac meg kell adni a két paraméter vonalak. Expanzió után mac () helyébe a és b.

expandált = mac (foo bar, yuk yuk)

expandált = argument1: foo bar argument2: yuk yuk

Makrók feldolgozott húrok és C ++ szintaxis nagyon keveset tudnak, és az olyan típusú, C ++ vagy körök - semmi. A fordító látja csak kiterjesztett formája a makró, így a hiba diagnosztizálják a makrót, amikor a makró bővült, de nem akkor, amikor meg van határozva. Ennek eredményeként, vannak furcsa hibaüzeneteket.

Itt ilyen makrók is elég:

#define Case szünet; ügy

#define nl <<"\n"

#define örökre for (;;)

Ez teljesen felesleges makrók:

#define PI 3.141593

De veszélyes makrók példa:

#define négyzet alakú (a) a * a

#define INCR_xx (xx) ++

Hogy milyen veszélyesek, próbálja elvégezni terjeszkedés a következő példát:

int xx = 0; // globális counter

int xx = 0; // helyi változó

xx = SQUARE (XX + 2); // xx = xx + 2 * xx + 2

INCR_xx; // növeli a helyi xx

ha (a-DISP == b)

Ha kell használni egy makrót, amikor hivatkozva globális nevek, használja a hatálya felbontás működését. és csatolniuk kell a belépési makró nevét paraméter zárójelben, ahol lehetséges (lásd. a MIN fent).

Megjegyzés: a különbség az eredmények bővítése két makrók:

Makrók segítségével, akkor dolgozzon a saját nyelvén. A legvalószínűbb, hogy a többi lesz érthetetlen. Ezen túlmenően, a C előfeldolgozó - egy nagyon egyszerű makró processzor. Amikor megpróbál tenni valamit, nem triviális, azt fogod találni, hogy ezzel lehetetlen vagy rendkívül nehéz.

Kapcsolódó cikkek