C Programmering

Makro i C-språk

Makro i C-språk
Ett makro i C-språk är en kod som har tilldelats ett namn. När namnet används var som helst i programmet ersätts makrovärdet före programmets sammanställning. I den här artikeln kommer vi att se i detalj hur man skriver ett makro på C-språk.

Tänk på följande kod:

START
INTEGER n = 5;
PRINT ("Värdet på n är% d", n);
SLUTET

Ovanstående kod är inte en giltig C-kod.

Men följande kod är giltig:

// Exempel1.c
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
START
INTEGER n = 5;
PRINT ("Värdet på n är% d", n);
SLUTET

Innan kompilering har makrot START, INTEGER, PRINT och END ersatts med sitt värde och koden blir en giltig C-kod. Vi kan kontrollera med följande kommando:

gcc -E Exempel 1.c

Detta kommando visas efter att alla makron har expanderats.

Nu kommer vi att se olika typer av makron:

1. Objektliknande makron:

Syntax:

#define macro_name macro_value

Om makrot tar mer än en rad kan vi göra det enligt följande:

#define macro_name macro_value1 \
makrovärde2 \
macro_value3
#define MAX 200

Detta makro ser ut som ett dataobjekt, det är därför den här typen av makro kallas som ett objektliknande makro.

// Exempel2.c
//#omfatta
#define MAX 200
int main ()

printf ("MAX-värde är:% d", MAX);
returnera 0;

I Exapmle2.c, MAX är ett makro. Från produktionen observerar vi det MAX ersätts med dess värde 200.

2. Funktionsliknande makron:

Syntax:

#define macro_name () macro_value

makronamn är ett användardefinierat namn på makrot. Par parentes måste sätta efter makronamn. Inget utrymme är tillåtet mellan makronamn och parentes. Vi kan också skicka argument i denna typ av makron.

#define add (x, y) x + y

Detta makro ser ut som ett funktionsanrop, det är därför den här typen av makro kallas ett funktionsliknande makro.

// Exempel3.c
#define add (x, y) x + y
int main ()

int a;
flyta b;
a = addera (4,5);
b = lägg till (2.5,3.6)
returnera 0;

I exempel 3.c, Vi har sett att till skillnad från C: s funktion, ersätter makrot endast koden med argument utan att beräkna den. Så vi kan skicka olika datatyper med samma makro.

Om vi ​​placerar ett mellanslag mellan makronamnet och parentesen fungerar det på samma sätt som ett objektliknande makro. Nedan illustrerar C exempel detta.

// Exempel4.c
#define add (x, y) x + y
int main ()

int a;
flyta b;
a = addera (4,5);
b = lägg till (2.5,3.6)

I exempel 4.c, vi har sett att makrotillägget ersätts med (x, y) x + y . Samma som ett objektliknande makro.

3. Makro för polering av token:
På C-språk används ## operator för att klistra in token. Med den här operatören kan vi kombinera två giltiga tokens till en giltig token.
Exempel:

// Exempel 5.c
#define MARGE (x, y) x ## y
int main ()

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

Om vi ​​försöker att klistra in token som inte genererar en giltig token, ger C-kompilatorn ett fel eller en varning.

// Exempel 6.c
#define MARGE (x, y) x ## y
int main ()

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

I Exempel 6.c, vi har ett felmeddelande eftersom vi efter en kombination av två tokens får en ogiltig token '52 + '.

4. Makro för strängläggning:
På C-språk används # operator för att konvertera en makroparameter till en strängkonstant. När en # -operator föregår en makroparameter, omvandlas parametern till en strängbokstav. Stringizing kan användas för objektliknande och funktionsliknande makron.
Exempel:

// Exempel 7.c
#define STRINGIZING (x) #x
int main ()

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

I Exempel 7.c Vi har en sträng "Hello World" med STRINGIZING-makro.

Slutsats:

Denna artikel har lärt sig om alla typer av makroliknande Objektliknande makron, Funktionsliknande makron, Makro för polering av token, Makro för Stringizing och Makro för Stringizing på C-språk. Nu kan vi använda ett makro i vårt C-program utan tvekan.

OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...
SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...
Battle for Wesnoth Tutorial
Slaget om Wesnoth är ett av de mest populära open source-strategispel som du kan spela just nu. Det här spelet har inte bara utvecklats under mycket l...