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) / a-= 4==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.