Vegye figyelembe a következő kódot:
RAJTINTEGER n = 5;
NYOMTATÁS ("n értéke% d", n);
VÉGE
A fenti kód nem érvényes C kód.
De a következő kód érvényes:
// Példa1.c#define START int main ()
#define END
#define INTEGER int
#define NYOMTATÁS (A, B) printf (A, B)
RAJT
INTEGER n = 5;
NYOMTATÁS ("n értéke% d", n);
VÉGE
A fordítás előtt a START, INTEGER, PRINT és END makrókat lecserélték az értékükre, és a kód érvényes C kódgá válik. A következő paranccsal ellenőrizhetjük:
gcc -E példa1.cEz a parancs az összes makró kibontása után jelenik meg.
Most különböző típusú makrókat fogunk látni:
1. Objektumszerű makrók:
Szintaxis:
#define macro_name macro_value- A makró mindig a #define paranccsal kezdődik
- A makrónév a makró felhasználó által definiált neve
- macro_value a makró értéke. Lehet, hogy bármi, de egy sor és a makrótest ezzel a sor végével végződik. Nem igényel pontosvesszőt (;) a végén. A helyet is figyelembe veszik.
Ha a makró egynél több sort vesz igénybe, akkor a következőképpen tehetjük meg:
#define macro_name macro_value1 \makro_érték2 \
makro_érték3
#define MAX 200
Ez a makró úgy néz ki, mint egy adatobjektum, ezért hívták ezt a típusú makrót objektumszerű makróként.
// 2. példa.c// # tartalmazza
#define MAX 200
int main ()
printf ("MAX érték:% d", MAX);
visszatér 0;
Ban ben Exapmle2.c, MAX egy makró. A kimenet alapján ezt figyeljük meg MAX helyébe annak értéke lép 200.
2. Funkciószerű makrók:
Szintaxis:
#define macro_name () makro_értékmakró_neve a makró felhasználó által definiált neve. A zárójel párját a makró_neve. A hely nem engedélyezett makró_neve és zárójel. Az ilyen típusú makrókban is adhatunk érveket.
#define add (x, y) x + yEz a makró függvényhívásnak tűnik, ezért ezt a típusú makrót függvény-makrónak hívják.
// 3. példa.c#define add (x, y) x + y
int main ()
int a;
úszó b;
a = add (4,5);
b = add (2.5,3.6)
visszatér 0;
A 3. példában.c, láttuk, hogy a C függvényével ellentétben a makró csak a kódot cseréli ki argumentumokkal, anélkül, hogy kiszámolná. Tehát ugyanazon makróval különböző adattípusokat adhatunk át.
Ha szóközt teszünk a makró neve és a zárójel közé, akkor ugyanúgy működik, mint egy objektumszerű makró. A C ábra ezt szemlélteti.
// Példa4.c#define add (x, y) x + y
int main ()
int a;
úszó b;
a = add (4,5);
b = add (2.5,3.6)
A 4. példában.c, láttuk, hogy a makróösszetételt (x, y) x + y váltja fel . Ugyanaz, mint egy objektumszerű makró.
3. Makró a token beillesztéséhez:
C nyelven a ## operátort használják a token beillesztésére. Ennek az operátornak a segítségével két érvényes tokent kombinálhatunk egy érvényes tokenné.
Példa:
#define MARGE (x, y) x ## y
int main ()
int szám = MARGE (52,34);
visszatér 0;
Ha olyan token beillesztést próbálunk meg végrehajtani, amely nem generál érvényes tokent, akkor a C fordító hibát vagy figyelmeztetést ad.
// Példa6.c#define MARGE (x, y) x ## y
int main ()
int szám = MARGE (52, +);
visszatér 0;
Ban ben 6. példa.c, hibaüzenetünk van, mert két token kombinációja után érvénytelen '52 + 'tokent kapunk.
4. Makró a stringezéshez:
C nyelven a # operátor arra használják, hogy egy makroparamétert karakterlánc konstanssá konvertáljon. Amikor egy # operátor megelőzi a makroparamétert, akkor a paraméter karakterláncra változik. A karaktersorozat felhasználható objektumszerű és függvényszerű makrókhoz.
Példa:
#define STRINGIZING (x) #x
int main ()
printf (STRINGIZING (Hello World));
visszatér 0;
Ban ben 7. példa.c a STRINGIZING makrót használva kaptunk egy „Hello World” karakterláncot.
Következtetés:
Ez a cikk megismerte a makroszerűek minden típusát Objektumszerű makrók, Funkciószerű makrók, Makró a token beillesztéshez, Makró a stringeléshez és a makró a stringeléshez C nyelven. Most minden kétség nélkül használhatunk egy makrót a C programunkban.