C Programmeren

Macro in C-taal

Macro in C-taal
Een macro in C-taal is een stukje code waaraan een naam is toegewezen. Wanneer de naam ergens in het programma wordt gebruikt, wordt de macrowaarde vervangen vóór de compilatie van het programma. In dit artikel zullen we in detail zien hoe je een macro in C-taal schrijft.

Beschouw de volgende code:

BEGIN
GEHEEL GETAL n=5;
PRINT("Waarde van n is %d",n);
EINDE

De bovenstaande code is geen geldige C-code.

Maar de volgende code is geldig:

//Voorbeeld 1.c
#define START int main()
#definieer EINDE
#define INTEGER int
#define PRINT(A,B) printf(A,B)
BEGIN
GEHEEL GETAL n=5;
PRINT("Waarde van n is %d",n);
EINDE

Vóór de compilatie zijn de macro START, INTEGER, PRINT en END vervangen door hun waarde en wordt de code een geldige C-code. We kunnen controleren met behulp van de volgende opdracht:

gcc -E Voorbeeld1.c

Deze opdracht wordt weergegeven nadat alle macro's zijn uitgevouwen.

Nu zullen we verschillende soorten macro's zien:

1. Objectachtige macro's:

Syntaxis:

#define macro_name macro_value

Als de macro meer dan één regel nodig heeft, kunnen we dit als volgt doen:

#define macro_name macro_value1 \
macro_waarde2 \
macro_waarde3
#definieer MAX 200

Deze macro ziet eruit als een gegevensobject, daarom wordt dit type macro een objectachtige macro genoemd.

//Voorbeeld2.c
//#include
#definieer MAX 200
int hoofd()

printf("MAX Waarde is: %d",MAX);
retourneer 0;

In Voorbeeld2.c, MAX is een macro. Uit de output zien we dat: MAX wordt vervangen door zijn waarde 200.

2. Functie-achtige macro's:

Syntaxis:

#define macro_name() macro_value

macronaam is een door de gebruiker gedefinieerde naam van de macro. Paar haakjes moet na de . worden geplaatst macronaam. Er is geen spatie toegestaan ​​tussen macronaam en haakjes. We kunnen ook argumenten doorgeven in dit soort macro's.

#define add(x,y) x+y

Deze macro ziet eruit als een functie-aanroep, daarom wordt dit type macro een functie-achtige macro genoemd.

//Voorbeeld3.c
#define add(x,y) x+y
int hoofd()

int een;
drijven b;
a = optellen(4,5);
b = optellen (2.5,3.6)
retourneer 0;

In voorbeeld3.c, we hebben gezien dat, in tegenstelling tot de functie van C, de macro alleen de code vervangt door argumenten zonder deze te berekenen. We kunnen dus verschillende gegevenstypen doorgeven met dezelfde macro.

Als we een spatie tussen de macronaam en haakjes plaatsen, werkt het hetzelfde als een objectachtige macro. Hieronder C Voorbeeld illustreert dit:.

//Voorbeeld4.c
#define toevoegen (x,y) x+y
int hoofd()

int een;
drijven b;
a = optellen(4,5);
b = optellen (2.5,3.6)

In voorbeeld4.c, we hebben gezien dat de macro-add wordt vervangen door (x,y) x+y . Hetzelfde als een objectachtige macro.

3. Macro voor token plakken:
In C-taal wordt de ##-operator gebruikt voor het plakken van tokens. Met deze operator kunnen we twee geldige tokens combineren tot één geldig token.
Voorbeeld:

//Voorbeeld5.c
#define MARGE(x,y) x##y
int hoofd()

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

Als we proberen te token plakken dat geen geldig token genereert, geeft de C-compiler een fout of waarschuwing.

//Voorbeeld6.c
#define MARGE(x,y) x##y
int hoofd()

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

In Voorbeeld6.c, we hebben een foutmelding omdat we na een combinatie van twee tokens een ongeldig token '52+' krijgen.

4. Macro voor stringiseren:
In C-taal wordt de # operator gebruikt om een ​​macroparameter om te zetten in een stringconstante. Wanneer een #-operator voorafgaat aan een macroparameter, wordt de parameter geconverteerd naar een letterlijke tekenreeks. Stringizing kan worden gebruikt voor objectachtige en functieachtige macro's.
Voorbeeld:

//Voorbeeld7.c
#define STRINGIZING(x) #x
int hoofd()

printf(STRINGIZING(Hallo wereld));
retourneer 0;

In Voorbeeld7.c we hebben een string "Hello World" met behulp van STRINGIZING macro.

Conclusie:

Dit artikel heeft geleerd over alle soorten macro-achtige Objectachtige macro's, Functie-achtige macro's, Macro voor het plakken van tokens, Macro voor Stringizing en Macro voor Stringizing in C taal. Nu kunnen we zonder enige twijfel een macro in ons C-programma gebruiken.

5 beste arcade-spellen voor Linux
Tegenwoordig zijn computers serieuze machines die worden gebruikt om te gamen. Als je de nieuwe hoge score niet kunt halen, weet je wat ik bedoel. In ...
Strijd om Wesnoth 1.13.6 Ontwikkeling vrijgegeven
Strijd om Wesnoth 1.13.6 die vorige maand werd uitgebracht, is de zesde ontwikkelingsrelease in de 1.13.x-serie en het levert een aantal verbeteringen...
Hoe League Of Legends op Ubuntu 14 te installeren.04
Als je fan bent van League of Legends, dan is dit een kans voor jou om League of Legends te testen. Merk op dat LOL wordt ondersteund op PlayOnLinux a...