In C, een macro is een stukje code in een programma dat wordt vervangen door de waarde van de macro. Macro wordt gedefinieerd door #definiëren richtlijn. Telkens wanneer de compiler een macronaam tegenkomt, vervangt deze de naam door de definitie van de macro. Macrodefinities hoeven niet te worden afgesloten met een puntkomma( ; ).
Voorbeelden van macro's in C
Hieronder staan de programma's om het gebruik van macro's in C te illustreren:
voorbeeld 1
Het onderstaande voorbeeld demonstreert het gebruik van macro's om LIMIT te definiëren.
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;> }> |
>
>Uitvoer
The value of LIMIT is 5>
Voorbeeld 2
Het onderstaande voorbeeld demonstreert het gebruik van macro's om de oppervlakte van een rechthoek te vinden.
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;> }> |
>
>Uitvoer
Area of rectangle is: 50>
Uitleg
Uit het bovenstaande programma kunnen we zien dat wanneer de compiler iets vindt GEBIED(l, b) in het programma vervangt het deze door de macrodefinitie, d.w.z. (pond) . De waarden die worden doorgegeven aan de macrosjabloon GEBIED(l, b) wordt eveneens vervangen door de verklaring (pond) . Daarom, GEBIED(10, 5) gelijk zal zijn aan 10*5 .
Soorten macro's in C
Er zijn twee soorten macro's in C-taal:
1. Objectachtige macro's
Een objectachtige macro is een eenvoudige identificatie die wordt vervangen door een codefragment. Het wordt objectachtig genoemd omdat het lijkt op een object in de code dat er gebruik van maakt. Het wordt in de volksmond gebruikt om een symbolische naam te vervangen door een numerieke/variabele die wordt weergegeven als een constante.
Voorbeeld
Het onderstaande voorbeeld is de illustratie van een eenvoudige macro, d.w.z. objectachtige macro's.
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;> }> |
>
>Uitvoer
Lockdown will be extended upto 31-MAY-2020>
2. Keten macro's
Macro's binnen macro's worden ketenmacro's genoemd. Bij ketenmacro's wordt eerst de bovenliggende macro uitgevouwen en vervolgens de onderliggende macro.
Voorbeeld
Het onderstaande programma is de illustratie van een ketenmacro
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;> }> |
>
>Uitvoer
Geeks for Geeks have 138K followers on Instagram>
Uitleg:
INSTAGRAM wordt eerst uitgebreid om VOLGERS te produceren. Vervolgens wordt de uitgebreide macro uitgebreid om het resultaat als 138K te produceren. Dit wordt het koppelen van macro's genoemd.
3. Macro's met meerdere regels
Een objectachtige macro kan uit meerdere regels bestaan. Om een macro met meerdere regels te maken, moet u dus backslash-newline gebruiken.
Voorbeeld
Hieronder ziet u de illustratie van macro's met meerdere regels:
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;> }> |
>
>Uitvoer
Elements of Array are: 1 2 3>
4. Functie-achtige macro's
Deze macro's zijn hetzelfde als een functieaanroep. Het vervangt de volledige code in plaats van een functienaam. Een paar haakjes direct na de macronaam is noodzakelijk. Als plaatsen we een spatie tussen de macronaam en de haakjes in de macrodefinitie, dan werkt de macro niet .
Een functie-achtige macro wordt alleen verlengd als en alleen als de naam ervan met een paar haakjes erachter verschijnt. Als we dit niet doen, krijgt de functieaanwijzer het adres van de echte functie en ontstaat er een syntaxisfout.
Voorbeeld
Het onderstaande voorbeeld is de illustratie van functieachtige macro's
C
grafiek voor toewijzing van middelen
// 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;> }> |
>
>Uitvoer
Minimum value between 18 and 76 is 18>
Hier is een voorbeeld dat meer inzicht geeft in macro's:
Probleem: We moeten de oppervlakte van een cirkel vinden door te definiëren GEBIED(r) Macro's.
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> |
>
>Uitvoer
Area of Circle with radius 7: 153.938>
Conclusie
Macro's zijn kleine stukjes code die met één opdracht kunnen worden uitgevoerd. Ze kunnen worden gebruikt om taken te automatiseren, complexe processen te vereenvoudigen en de productiviteit te verbeteren. Er zijn echter ook enkele nadelen aan het gebruik van macro's. Hier zijn enkele van de voor- en nadelen van macro's:
Veelgestelde vragen over C-macro's
Q1. Wat zijn de voordelen van macro's?
Antwoord:
Verhoogde productiviteit: Macro's kunnen tijd besparen en fouten verminderen door repetitieve taken te automatiseren. Aanpassing: Macro's kunnen worden aangepast aan specifieke behoeften, waardoor een grotere flexibiliteit ontstaat in de manier waarop taken worden voltooid. Consistentie: Macro's kunnen helpen de consistentie in taken te garanderen door een reeks vooraf bepaalde instructies te volgen. Efficiëntie: Macro's kunnen taken sneller uitvoeren dan mensen, waardoor de algehele efficiëntie verbetert. Gebruiksgemak: Macro's zijn eenvoudig te maken en te gebruiken en vereisen weinig tot geen programmeerkennis
Vraag 2. Wat zijn de nadelen van macro's?
Antwoord:
Beveiligingsrisico's: Macro's kunnen een beveiligingsrisico vormen als ze niet goed zijn beveiligd of als ze worden gebruikt om kwaadaardige code uit te voeren. Beperkte functionaliteit: Macro's kunnen mogelijk geen complexere taken uitvoeren, waardoor hun bruikbaarheid wordt beperkt. Compatibiliteitsproblemen: Macro's zijn mogelijk niet compatibel met alle softwaretoepassingen, waardoor hun bruikbaarheid wordt beperkt. Onderhoud: Macro's vereisen mogelijk onderhoud en updates, wat tijdrovend en kostbaar kan zijn. Afhankelijkheid: Een te grote afhankelijkheid van macro's kan resulteren in verminderde probleemoplossende vaardigheden en kritisch denken.
Q3. Kan een macro argumenten aannemen?
Antwoord:
Ja, macro's kunnen argumenten aannemen. MAX is bijvoorbeeld een macro die twee argumenten (a en b) nodig heeft en het maximum van deze twee retourneert.
Q4. Kunnen macro's recursief zijn?
Antwoord:
Nee, macro's kunnen niet recursief zijn. Als een macro recursief wordt, verwijst de definitie naar zichzelf en leidt dit tot een oneindige lus tijdens de voorverwerking.