logo

Makron och dess typer i C

I C, a makro är en bit kod i ett program som ersätts av värdet på makrot. Makro definieras av #definiera direktiv. Närhelst ett makronamn påträffas av kompilatorn, ersätter det namnet med definitionen av makrot. Makrodefinitioner behöver inte avslutas med semikolon( ; ).

Exempel på makron i C

Nedan finns programmen för att illustrera användningen av makron i C:



Exempel 1

Exemplet nedan visar användningen av makron för att definiera LIMIT.

C








// C program to illustrate macros> #include> // Macro definition> #define LIMIT 5> // Driver Code> int> main()> {> >// Print the value of macro defined> >printf>(>'The value of LIMIT'> >' is %d'>,> >LIMIT);> >return> 0;> }>

>

>

Produktion

The value of LIMIT is 5>

Exempel 2

Exemplet nedan visar användningen av makron för att hitta arean av en rektangel.

C




// C program to illustrate macros> #include> // Macro definition> #define AREA(l, b) (l * b)> // Driver Code> int> main()> {> >// Given lengths l1 and l2> >int> l1 = 10, l2 = 5, area;> >// Find the area using macros> >area = AREA(l1, l2);> >// Print the area> >printf>(>'Area of rectangle'> >' is: %d'>,> >area);> >return> 0;> }>

>

>

Produktion

Area of rectangle is: 50>

Förklaring
Från programmet ovan kan vi se det när kompilatorn hittar OMRÅDE(l, b) i programmet ersätter den den med makrodefinitionen, dvs. (l*b) . Värdena som skickas till makromallen OMRÅDE(l, b) kommer också att ersättas av uttalandet (l*b) . Därför, AREA(10, 5) kommer att vara lika med 10*5 .

Typer av makron i C

Det finns två typer av makron i C-språk:

1. Objektliknande makron

Ett objektliknande makro är en enkel identifierare som kommer att ersättas av ett kodfragment. Det kallas objektliknande eftersom det ser ut som ett objekt i kod som använder det. Det används populärt för att ersätta ett symboliskt namn med en numerisk/variabel representerad som en konstant.

Exempel

Exemplet nedan är illustrationen av ett enkelt makro, dvs objektliknande makron.

C




// C program to illustrate macros> #include> // Macro definition> #define DATE 31> // Driver Code> int> main()> {> >// Print the message> >printf>(>'Lockdown will be extended'> >' upto %d-MAY-2020'>,> >DATE);> >return> 0;> }>

>

>

Produktion

Lockdown will be extended upto 31-MAY-2020>

2. Kedjemakron

Makron inuti makron kallas kedjemakron. I kedjemakron expanderas först och främst det överordnade makrot och sedan expanderas det underordnade makrot.

Exempel

Nedanstående program är illustrationen av ett kedjemakro

C




// C program to illustrate macros> #include> > // Macro definition> #define INSTAGRAM FOLLOWERS> #define FOLLOWERS 138> > // Driver Code> int> main()> {> >// Print the message> >printf>(>'Geeks for Geeks have %dK'> >' followers on Instagram'>,> >INSTAGRAM);> > >return> 0;> }>

>

>

Produktion

Geeks for Geeks have 138K followers on Instagram>

Förklaring:
INSTAGRAM utökas först för att producera FÖLJARE. Sedan utökas det utökade makrot för att få resultatet till 138K. Detta kallas kedja av makron.

3. Flerradiga makron

Ett objektliknande makro kan ha en multi-line. Så för att skapa ett flerradsmakro måste du använda backslash-newline.

Exempel

Nedan är illustrationen av flerradsmakron:

C




// C program to illustrate macros> #include> // Multi-line Macro definition> #define ELE 1,> >2,> >3> // Driver Code> int> main()> {> >// Array arr[] with elements> >// defined in macros> >int> arr[] = { ELE };> >// Print elements> >printf>(>'Elements of Array are: '>);> >for> (>int> i = 0; i <3; i++) {> >printf>(>'%d '>, arr[i]);> >}> >return> 0;> }>

>

>

Produktion

Elements of Array are: 1 2 3>

4. Funktionsliknande makron

Dessa makron är samma som ett funktionsanrop. Den ersätter hela koden istället för ett funktionsnamn. Parenteser omedelbart efter makronamnet är nödvändiga. Om vi sätter ett mellanslag mellan makronamnet och parenteserna i makrodefinitionen, då kommer makrot inte att fungera .
Ett funktionsliknande makro förlängs bara om och endast om dess namn visas med ett par parenteser efter det. Om vi ​​inte gör detta kommer funktionspekaren att få adressen till den verkliga funktionen och leda till ett syntaxfel.

Exempel

Exemplet nedan är en illustration av funktionsliknande makron

C


all caps genväg excel



// C program to illustrate macros> #include> // Function-like Macro definition> #define min(a, b) (((a) <(b)) ? (a) : (b))> // Driver Code> int> main()> {> >// Given two number a and b> >int> a = 18;> >int> b = 76;> >printf>(>'Minimum value between'> >' %d and %d is %d '>,> >a, b, min(a, b));> >return> 0;> }>

>

>

Produktion

Minimum value between 18 and 76 is 18>

Här är ett exempel som ger mer förståelse för makron:

Problem: Vi måste hitta arean av en cirkel genom att definiera OMRÅDE(r) Makron.

C




#include> #define PI 3.1416> #define AREA(r) (PI*(r)*(r))> int> main() {> >float> r = 7;>// radius of circle> > >printf>(>'Area of Circle with radius %.0f: %.3f'>, r, AREA(r));> >return> 0;> }> // This code is contributed by Susobhan Akhuli>

>

>

Produktion

Area of Circle with radius 7: 153.938>

Slutsats

Makron är små bitar av kod som kan köras med ett enda kommando. De kan användas för att automatisera uppgifter, förenkla komplexa processer och förbättra produktiviteten. Det finns dock också vissa nackdelar med att använda makron. Här är några av fördelarna och nackdelarna med makron:

Vanliga frågor om C-makron

Q1. Vilka är fördelarna med makron?

Svar:

    Ökad produktivitet: Makron kan spara tid och minska fel genom att automatisera repetitiva uppgifter. Anpassning: Makron kan anpassas för att passa specifika behov, vilket möjliggör större flexibilitet i hur uppgifter slutförs. Konsistens: Makron kan hjälpa till att säkerställa konsekvens i uppgifter genom att följa en uppsättning förutbestämda instruktioner. Effektivitet: Makron kan utföra uppgifter snabbare än människor, vilket förbättrar den totala effektiviteten. Användarvänlighet: Makron är enkla att skapa och använda och kräver liten eller ingen programmeringskunskap

Q2. Vilka är nackdelarna med makron?

Svar:

    Säkerhetsrisker: Makron kan vara en säkerhetsrisk om de inte är ordentligt säkrade eller om de används för att exekvera skadlig kod. Begränsad funktionalitet: Makron kanske inte kan utföra mer komplexa uppgifter, vilket begränsar deras användbarhet. Kompatibilitetsproblem: Makron kanske inte är kompatibla med alla program, vilket begränsar deras användbarhet. Underhåll: Makron kan kräva underhåll och uppdateringar, vilket kan vara tidskrävande och kostsamt. Beroende: Övertilltro till makron kan resultera i minskade problemlösningsförmåga och kritiskt tänkande.

Q3. Kan ett makro ta argument?

Svar:

Ja, makron kan ta argument. Till exempel är MAX ett makro som tar två argument (a och b) och returnerar det maximala av de två.

Q4. Kan makron vara rekursiva?

Svar:

Nej, makron kan inte vara rekursiva. Om ett makro blir rekursivt hänvisar definitionen till sig själv, och det kommer att leda till en oändlig loop under förbearbetningen.