Makro på C -språk

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

Tenk på følgende kode:

START
Heltall 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 slutt
#Define heltall Int
#Define Print (A, B) Printf (A, B)
START
Heltall n = 5;
Print ("Verdien av n er %d", n);
SLUTT

Før sammenstilling er makrostart, heltall, utskrift og slutt erstattet av verdien deres, og koden blir en gyldig C -kode. Vi kan sjekke ved hjelp av følgende kommando:

GCC -E EKSEMPEL1.c

Denne kommandoen vil vises etter å ha utvidet alle makroene.

Nå vil vi se forskjellige typer makroer:

1. Objektlignende makroer:

Syntaks:

#Define Macro_Name Macro_Value
  • Makro starter alltid med #defin
  • makro_navn er et brukerdefinert navn på makroen
  • makro_value er verdien av makroen. Det kan være hva som helst, men en linje og makrokroppen ender med den linjens ender. Det krever ikke semikolon (;) på slutten. Plass vurderes også.

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

#defin makro_navn makro_value1 \
makro_value2 \
makro_value3
#Define Max 200

Denne makroen ser ut som et dataobjekt som er grunnen til at denne typen makro kalles en objektlignende makro.

// Eksempel2.c
//#inkludere
#Define Max 200
int main ()

printf ("maks verdi er: %d", maks);
return 0;

I Exapmle2.C, maks er en makro. Fra utgangen observerer vi det Maks erstattes av verdien 200.

2. Funksjonslignende makroer:

Syntaks:

#Define Macro_name () Macro_Value

makro_navn er et brukerdefinert navn på makroen. Par parentes må legge etter makro_navn. Ingen plass er tillatt mellom makro_navn og parentes. Vi kan også passere argumenter i denne typen makroer.

#Define Legg til (x, y) x+y

Denne makroen ser ut som en funksjonsanrop, det er derfor denne typen makro kalt en funksjonslignende makro.

// Eksempel3.c
#Define Legg til (x, y) x+y
int main ()

int a;
float b;
A = Legg til (4,5);
B = Legg til (2.5,3.6)
return 0;

I eksempel3.c, Vi har sett at i motsetning til Cs funksjon, erstatter makroen bare koden med argumenter uten å beregne den. Så vi kan bestå forskjellige datatype ved å bruke den samme makroen.

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

// Eksempel4.c
#Define Legg til (x, y) x+y
int main ()

int a;
float b;
A = Legg til (4,5);
B = Legg til (2.5,3.6)

I eksempel4.C, vi har sett at makro -tillegget erstattes av (x, y) x+y . Samme som en objektlignende makro.

3. Makro for token liming:
På C -språk brukes ## operatør for token liming. Ved hjelp av denne operatøren kan vi kombinere to gyldige symboler til ett gyldig token.
Eksempel:

// Eksempel5.c
#Define Marge (x, y) x ## y
int main ()

int num = marge (52,34);
return 0;

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

// Eksempel6.c
#Define Marge (x, y) x ## y
int main ()

int num = marge (52,+);
return 0;

I Eksempel6.c, Vi har en feilmelding fordi vi, etter en kombinasjon av to symboler, får en ugyldig token '52+'.

4. Makro for strengisering:
På C -språk brukes # operatør til å konvertere en makroparameter til en strengkonstant. Når en # operatør går foran en makroparameter, konverterer parameteren til en streng bokstavelig. Stringisering kan brukes til objektlignende og funksjonslignende makroer.
Eksempel:

// Eksempel7.c
#Define Stringizing (x) #x
int main ()

printf (Stringizing (Hello World));
return 0;

I Eksempel7.c Vi har en streng "Hello World" ved hjelp av Stringizing Macro.

Konklusjon:

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