I C, a makro er et stykke kode i et program som erstattes av verdien til makroen. Makro er definert av #definere direktiv. Når kompilatoren møter et makronavn, erstatter det navnet med definisjonen av makroen. Makrodefinisjoner trenger ikke avsluttes med semikolon( ; ).
Eksempler på makroer i C
Nedenfor er programmene for å illustrere bruken av makroer i C:
Eksempel 1
Eksempelet nedenfor viser bruken av makroer for å definere 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;> }> |
>
>Produksjon
The value of LIMIT is 5>
Eksempel 2
Eksemplet nedenfor viser bruken av makroer for å finne arealet til et 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;> }> |
>
>Produksjon
Area of rectangle is: 50>
Forklaring
Fra programmet ovenfor kan vi se det når kompilatoren finner det OMRÅDE(l, b) i programmet erstatter den den med makrodefinisjonen, dvs. (l*b) . Verdiene som ble sendt til makromalen OMRÅDE(l, b) vil også bli erstattet av uttalelsen (l*b) . Derfor, AREA(10, 5) vil være lik 10*5 .
Typer makroer i C
Det er to typer makroer i C-språk:
1. Objektlignende makroer
En objektlignende makro er en enkel identifikator som vil bli erstattet av et kodefragment. Det kalles objektlignende fordi det ser ut som et objekt i kode som bruker det. Det er populært brukt for å erstatte et symbolsk navn med en numerisk/variabel representert som en konstant.
Eksempel
Eksempelet nedenfor er illustrasjonen av en enkel makro, dvs. objektlignende makroer.
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;> }> |
>
>Produksjon
Lockdown will be extended upto 31-MAY-2020>
2. Kjedemakroer
Makroer inne i makroer kalles kjedemakroer. I kjedemakroer utvides først overordnet makro, deretter utvides underordnet makro.
Eksempel
Programmet nedenfor er illustrasjonen av en kjedemakro
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;> }> |
>
>Produksjon
Geeks for Geeks have 138K followers on Instagram>
Forklaring:
INSTAGRAM utvides først for å produsere FØLGERE. Deretter utvides den utvidede makroen for å produsere resultatet som 138K. Dette kalles kjeding av makroer.
3. Makroer med flere linjer
En objektlignende makro kan ha en flerlinje. Så for å lage en multi-line makro må du bruke backslash-newline.
Eksempel
Nedenfor er illustrasjonen av flerlinjemakroer:
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;> }> |
>
>Produksjon
Elements of Array are: 1 2 3>
4. Funksjonslignende makroer
Disse makroene er de samme som et funksjonskall. Den erstatter hele koden i stedet for et funksjonsnavn. Parenteser umiddelbart etter makronavnet er nødvendig. Hvis vi setter et mellomrom mellom makronavnet og parentesene i makrodefinisjonen, da vil ikke makroen fungere .
En funksjonslignende makro blir bare forlenget hvis og bare hvis navnet vises med et par parenteser etter seg. Hvis vi ikke gjør dette, vil funksjonspekeren få adressen til den virkelige funksjonen og føre til en syntaksfeil.
Eksempel
Eksempelet nedenfor er en illustrasjon av funksjonslignende makroer
C
hvordan oppgraderer jeg java
// 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;> }> |
>
>Produksjon
Minimum value between 18 and 76 is 18>
Her er ett eksempel som vil gi mer forståelse av makroer:
Problem: Vi må finne arealet av en sirkel ved å definere OMRÅDE(r) Makroer.
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> |
>
>Produksjon
Area of Circle with radius 7: 153.938>
Konklusjon
Makroer er små kodebiter som kan utføres med en enkelt kommando. De kan brukes til å automatisere oppgaver, forenkle komplekse prosesser og forbedre produktiviteten. Det er imidlertid også noen ulemper med å bruke makroer. Her er noen av fordelene og ulempene med makroer:
Vanlige spørsmål om C-makroer
Q1. Hva er fordelene med makroer?
Svar:
Økt produktivitet: Makroer kan spare tid og redusere feil ved å automatisere repeterende oppgaver. Tilpasning: Makroer kan tilpasses for å passe spesifikke behov, noe som gir større fleksibilitet i hvordan oppgaver fullføres. Konsistens: Makroer kan bidra til å sikre konsistens i oppgaver ved å følge et sett med forhåndsbestemte instruksjoner. Effektivitet: Makroer kan utføre oppgaver raskere enn mennesker, noe som forbedrer den generelle effektiviteten. Brukervennlighet: Makroer er enkle å lage og bruke, og krever liten eller ingen programmeringskunnskap
Q2. Hva er ulempene med makroer?
Svar:
Sikkerhetsrisikoer: Makroer kan være en sikkerhetsrisiko hvis de ikke er ordentlig sikret eller hvis de brukes til å utføre ondsinnet kode. Begrenset funksjonalitet: Makroer kan kanskje ikke utføre mer komplekse oppgaver, noe som begrenser deres nytte. Kompatibilitetsproblemer: Makroer er kanskje ikke kompatible med alle programmer, noe som begrenser deres nytte. Vedlikehold: Makroer kan kreve vedlikehold og oppdateringer, noe som kan være tidkrevende og kostbart. Avhengighet: Overdreven avhengighet av makroer kan resultere i redusert problemløsningsevne og kritisk tenkning.
Q3. Kan en makro ta argumenter?
Svar:
Ja, makroer kan ta argumenter. For eksempel er MAX en makro som tar to argumenter (a og b) og returnerer det maksimale av de to.
Q4. Kan makroer være rekursive?
Svar:
Nei, makroer kan ikke være rekursive. Hvis en makro blir rekursiv, refererer definisjonen til seg selv, og det vil føre til en uendelig sløyfe under forbehandling.