C Programmering

Makro i C-språk

Makro i C-språk
En makro i C-språk er et stykke kode som har fått et navn. Når navnet brukes hvor som helst i programmet, erstattes makroverdien før programmets kompilering. I denne artikkelen vil vi se i detalj hvordan du skriver en makro på C-språk.

Vurder følgende kode:

START
INTEGER n = 5;
PRINT ("Verdien av n er% d", n);
SLUTT

Ovennevnte kode er ikke en gyldig C-kode.

Men følgende kode er gyldig:

// Eksempel1.c
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
START
INTEGER n = 5;
PRINT ("Verdien av n er% d", n);
SLUTT

Før kompilering er makroen START, INTEGER, PRINT og END erstattet av verdien, og koden blir en gyldig C-kode. Vi kan sjekke med følgende kommando:

gcc -E Eksempel1.c

Denne kommandoen vises etter utvidelse av alle makroene.

Nå vil vi se forskjellige typer makroer:

1. Objektlignende makroer:

Syntaks:

#define macro_name macro_value

Hvis makroen tar mer enn en linje, kan vi gjøre det som følger:

#define macro_name macro_value1 \
makroverdi2 \
makroverdi3
#definer MAX 200

Denne makroen ser ut som et dataobjekt, og derfor kalles denne makrotypen som en objektlignende makro.

// Eksempel2.c
//#inkludere
#definer MAX 200
int main ()

printf ("MAX Value is:% d", MAX);
retur 0;

I Exapmle2.c, MAX er en makro. Fra produksjonen observerer vi det MAX erstattes av verdien 200.

2. Funksjonslignende makroer:

Syntaks:

#define macro_name () macro_value

makronavn er et brukerdefinert navn på makroen. Par parentes må settes etter makronavn. Det er ikke tillatt med mellomrom makronavn og parentes. Vi kan også sende argumenter i denne typen makroer.

#definer add (x, y) x + y

Denne makroen ser ut som et funksjonsanrop, det er grunnen til at denne typen makro kalles en funksjonslignende makro.

// Eksempel3.c
#definer add (x, y) x + y
int main ()

int a;
flyte b;
a = legg til (4,5);
b = legg til (2.5,3.6)
retur 0;

I eksempel 3.c, vi har sett at i motsetning til Cs funksjon erstatter makroen bare koden med argumenter uten å beregne den. Så vi kan sende forskjellige datatyper ved hjelp av samme makro.

Hvis vi setter et mellomrom mellom makronavnet og parentesen, fungerer det det samme som en objektlignende makro. Nedenfor illustrerer C eksempel dette.

// Eksempel4.c
#definer add (x, y) x + y
int main ()

int a;
flyte b;
a = legg til (4,5);
b = legg til (2.5,3.6)

I eksempel 4.c, vi har sett at makrotilsetningen er erstattet av (x, y) x + y . Samme som en objektlignende makro.

3. Makro for liming av token:
I C-språk brukes ## operator for tokenliming. Ved hjelp av denne operatøren kan vi kombinere to gyldige tokens i ett gyldig token.
Eksempel:

// Eksempel5.c
#definer MARGE (x, y) x ## y
int main ()

int num = MARGE (52,34);
retur 0;

Hvis vi prøver å tokenliming som ikke genererer et gyldig token, gir C-kompilatoren en feil eller advarsel.

// Eksempel 6.c
#definer MARGE (x, y) x ## y
int main ()

int num = MARGE (52, +);
retur 0;

I Eksempel 6.c, vi har en feilmelding fordi vi etter en kombinasjon av to tokens får et ugyldig token '52 + '.

4. Makro for strenging:
På C-språk brukes # operator til å konvertere en makroparameter til en strengkonstant. Når en # -operator går foran en makroparameter, konverteres parameteren til en streng bokstavelig. Stringizing kan brukes til objektlignende og funksjonslignende makroer.
Eksempel:

// Eksempel7.c
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Hello World));
retur 0;

I Eksempel 7.c vi har en streng “Hello World” ved hjelp av STRINGIZING-makroen.

Konklusjon:

Denne artikkelen har lært om alle typer makrolignende Objektlignende makroer, Funksjonslignende makroer, Makro for polering av token, Makro for Stringizing og Makro for Stringizing på C-språk. Nå kan vi uten tvil bruke en makro i C-programmet vårt.

Hvordan laste ned og spille Sid Meier's Civilization VI på Linux
Introduksjon til spillet Civilization 6 er et moderne syn på det klassiske konseptet som ble introdusert i serien av Age of Empires-spillene. Ideen va...
Hvordan installere og spille Doom på Linux
Introduksjon til Doom Doom-serien stammer fra 90-tallet etter utgivelsen av den originale Doom. Det ble en øyeblikkelig suksess, og fra den tiden og u...
Vulkan for Linux-brukere
Med hver nye generasjon grafikkort ser vi spillutviklere skyve grensene for grafisk troskap og komme et skritt nærmere fotorealisme. Men til tross for...