C Programiranje

Makro v jeziku C

Makro v jeziku C
Makro v jeziku C je del kode, ki mu je bilo dodeljeno ime. Ko se ime uporablja kjer koli v programu, se vrednost makra nadomesti pred sestavljanjem programa. V tem članku bomo podrobno videli, kako napisati makro v jeziku C.

Upoštevajte naslednjo kodo:

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

Ta 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

Č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_value

ime_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 + y

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

// Primer5.c
#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:

// Primer7.c
#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.

Najboljši emulatorji igralne konzole za Linux
V tem članku bo navedena priljubljena programska oprema za emulacijo igralne konzole, ki je na voljo za Linux. Emulacija je sloj združljivosti program...
Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...
Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...