Upoštevajte naslednjo kodo:
STARTINTEGER n = 5;
PRINT ("Vrednost n je% d", n);
KONEC
Zgornja koda ni veljavna koda C.
Velja pa naslednja koda:
// Primer1.c#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
START
INTEGER n = 5;
PRINT ("Vrednost n je% d", n);
KONEC
Pred prevajanjem so makro START, INTEGER, PRINT in END zamenjali z njihovo vrednostjo in koda postane veljavna koda C. Preverimo lahko z naslednjim ukazom:
gcc -E Primer1.cTa ukaz se bo prikazal po razširitvi vseh makrov.
Zdaj bomo videli različne vrste makrov:
1. Predmetu podobni makri:
Sintaksa:
#define_makro_ime makro_vrednost- Makro se vedno začne z #define
- macro_name je uporabniško določeno ime makra
- macro_value je vrednost makra. Lahko je karkoli, toda ena vrstica in telo makra se konča s konci te vrstice. Na koncu ne zahteva podpičja (;). Upošteva se tudi prostor.
Če makro zavzame več vrstic, lahko to storimo na naslednji način:
#define_makro_ime macro_value1 \makro_vrednost2 \
macro_value3
#define MAX 200
Ta makro je videti kot podatkovni objekt, zato se ta vrsta makra pokliče kot objektni makro.
// Primer2.c// # vključuje
#define MAX 200
int main ()
printf ("MAX vrednost je:% d", MAX);
vrnitev 0;
V Primer 2.c, NAJVEČ je makro. Iz rezultata vidimo, da NAJVEČ se nadomesti z njegovo vrednostjo 200.
2. Makroni, podobni funkcijam:
Sintaksa:
#define macro_name () macro_valueime_makrona je uporabniško določeno ime makra. Par oklepajev je treba postaviti za ime_makrona. Med njimi ni prostora ime_makrona in oklepaji. Argumente lahko posredujemo tudi v tej vrsti makrov.
#define add (x, y) x + yTa makro je videti kot klic funkcije, zato se ta vrsta makra imenuje funkcijski makro.
// Primer3.c#define add (x, y) x + y
int main ()
int a;
plovec b;
a = dodaj (4,5);
b = dodaj (2.5,3.6)
vrnitev 0;
V primeru3.c, videli smo, da za razliko od funkcije C makro nadomešča samo kodo z argumenti, ne da bi jo izračunal. Torej lahko z istim makrom posredujemo različne vrste podatkov.
Če postavimo presledek med imenom makra in oklepaji, deluje enako kot objektni makro. Spodaj primer C to ponazarja.
// Primer4.c#define add (x, y) x + y
int main ()
int a;
plovec b;
a = dodaj (4,5);
b = dodaj (2.5,3.6)
V primeru4.c, videli smo, da je dodatek makra nadomeščen z (x, y) x + y . Enako kot objektni makro.
3. Makro za lepljenje žetonov:
V jeziku C se za lepljenje žetonov uporablja operator ##. S tem operaterjem lahko združimo dva veljavna žetona v en veljaven žeton.
Primer:
#define MARGE (x, y) x ## y
int main ()
int num = MARGE (52,34);
vrnitev 0;
Če poskusimo prilepiti žeton, ki ne ustvari veljavnega žetona, prevajalnik C izda napako ali opozorilo.
// Primer6.c#define MARGE (x, y) x ## y
int main ()
int num = MARGE (52, +);
vrnitev 0;
V Primer6.c, imamo sporočilo o napaki, ker po kombinaciji dveh žetonov dobimo neveljaven žeton '52 + '.
4. Makro za nizanje:
V jeziku C se operator # uporablja za pretvorbo parametra makra v nizno konstanto. Ko je operator # pred parametrom makra, se parameter pretvori v nizovno dobesedno. Stringiziranje se lahko uporablja za objektne in funkcijske makre.
Primer:
#define STRINGIZING (x) #x
int main ()
printf (STRINGIZING (Hello World));
vrnitev 0;
V Primer7.c dobili smo niz »Hello World« z uporabo STRINGIZING macro.
Zaključek:
Ta članek je izvedel o vseh vrstah makro podobnih Predmetu podobni makri, Makroni, podobni funkcijam, Makro za lepljenje žetonov, Makro za nizanje in Makro za nizanje v jeziku C. Zdaj lahko v našem programu C brez dvoma uporabimo makro.