C programozás

Makró C nyelven

Makró C nyelven
A C nyelvű makró egy olyan kódrészlet, amelyhez név tartozik. Ha a nevet bárhol használják a programban, a makró értéke kicserélődik a program fordítása előtt. Ebben a cikkben részletesen megnézzük, hogyan kell makrót írni C nyelven.

Vegye figyelembe a következő kódot:

RAJT
INTEGER 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.c

Ez 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

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ék

makró_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 + y

Ez 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:

// Példa5.c
#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:

// Példa7.c
#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.

5 legjobb arcade játék Linuxhoz
Manapság a számítógépek komoly gépek, amelyeket játékra használnak. Ha nem sikerül megszerezni az új magas pontszámot, akkor tudni fogja, mire gondolo...
Csata a Wesnothért 1.13.6 Megjelent a fejlesztés
Csata a Wesnothért 1.13.A múlt hónapban megjelent 6 a hatodik fejlesztési kiadás az 1-ben.13.x sorozat, és számos fejlesztést hajt végre, nevezetesen ...
A League of Legends telepítése az Ubuntu 14-re.04
Ha rajongsz a League of Legendsért, akkor ez egy lehetőség arra, hogy teszteld a League of Legends játékot. Ne feledje, hogy a LOL a PlayOnLinux rends...