I C, a makro er et stykke kode i et program, der erstattes af værdien af makroen. Makro er defineret af #Definere direktiv. Når et makronavn støder på af compileren, erstatter det navnet med definitionen af makroen. Makrodefinitioner behøver ikke afsluttes med semikolon( ; ).
Eksempler på makroer i C
Nedenfor er programmerne til at illustrere brugen af makroer i C:
Eksempel 1
Nedenstående eksempel viser brugen af makroer til at 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;> }> |
>
>Produktion
The value of LIMIT is 5>
Eksempel 2
Nedenstående eksempel viser brugen af makroer til at finde arealet af 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;> }> |
>
>Produktion
Area of rectangle is: 50>
Forklaring
Fra ovenstående program kan vi se det, når compileren finder OMRÅDE(l, b) i programmet erstatter det det med makrodefinitionen, dvs. (l*b) . Værdierne overført til makroskabelonen OMRÅDE(l, b) vil også blive erstattet af redegørelsen (l*b) . Derfor, OMRÅDE(10, 5) vil være lig med 10*5 .
Typer af makroer i C
Der er to typer makroer i C-sprog:
1. Objektlignende makroer
En objektlignende makro er en simpel identifikator, der vil blive erstattet af et kodefragment. Det kaldes objekt-lignende, fordi det ligner et objekt i kode, der bruger det. Det er populært brugt til at erstatte et symbolsk navn med en numerisk/variabel repræsenteret som en konstant.
Eksempel
Nedenstående eksempel er illustrationen af en simpel 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;> }> |
>
>Produktion
Lockdown will be extended upto 31-MAY-2020>
2. Kædemakroer
Makroer inde i makroer kaldes kædemakroer. I kædemakroer udvides først og fremmest den overordnede makro, derefter udvides den underordnede makro.
Eksempel
Nedenstående program er illustrationen af en kædemakro
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>
Forklaring:
INSTAGRAM udvides først til at producere FØLGERE. Derefter udvides den udvidede makro for at give resultatet som 138K. Dette kaldes kæde af makroer.
3. Multi-line makroer
En objektlignende makro kan have en multi-linje. Så for at oprette en multi-line makro skal du bruge backslash-newline.
Eksempel
Nedenfor er illustrationen af multiline makroer:
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. Funktionslignende makroer
Disse makroer er de samme som et funktionskald. Den erstatter hele koden i stedet for et funktionsnavn. Paranteser umiddelbart efter makronavnet er nødvendige. Hvis vi sætter et mellemrum mellem makronavnet og parenteserne i makrodefinitionen, så virker makroen ikke .
En funktionslignende makro forlænges kun, hvis og kun hvis dens navn vises med et par parenteser efter sig. Hvis vi ikke gør dette, vil funktionsmarkøren få adressen på den rigtige funktion og føre til en syntaksfejl.
Eksempel
Nedenstående eksempel er illustrationen af funktionslignende makroer
C
java læsning csv
// 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>
Her er et eksempel, der vil give mere forståelse af makroer:
Problem: Vi skal finde arealet af en cirkel ved at 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> |
>
>Produktion
Area of Circle with radius 7: 153.938>
Konklusion
Makroer er små stykker kode, der kan udføres med en enkelt kommando. De kan bruges til at automatisere opgaver, forenkle komplekse processer og forbedre produktiviteten. Der er dog også nogle ulemper ved at bruge makroer. Her er nogle af fordelene og ulemperne ved makroer:
Ofte stillede spørgsmål om C-makroer
Q1. Hvad er fordelene ved makroer?
Svar:
Øget produktivitet: Makroer kan spare tid og reducere fejl ved at automatisere gentagne opgaver. Tilpasning: Makroer kan tilpasses til at passe til specifikke behov, hvilket giver mulighed for større fleksibilitet i, hvordan opgaver udføres. Konsistens: Makroer kan hjælpe med at sikre sammenhæng i opgaver ved at følge et sæt forudbestemte instruktioner. Effektivitet: Makroer kan udføre opgaver hurtigere end mennesker, hvilket forbedrer den samlede effektivitet. Brugervenlighed: Makroer er nemme at oprette og bruge, og de kræver lidt eller ingen programmeringsviden
Q2. Hvad er ulemperne ved makroer?
Svar:
Sikkerhedsrisici: Makroer kan være en sikkerhedsrisiko, hvis de ikke er ordentligt sikret, eller hvis de bruges til at udføre ondsindet kode. Begrænset funktionalitet: Makroer er muligvis ikke i stand til at udføre mere komplekse opgaver, hvilket begrænser deres anvendelighed. Kompatibilitetsproblemer: Makroer er muligvis ikke kompatible med alle softwareprogrammer, hvilket begrænser deres anvendelighed. Vedligeholdelse: Makroer kan kræve vedligeholdelse og opdateringer, hvilket kan være tidskrævende og dyrt. Afhængighed: Overdreven afhængighed af makroer kan resultere i nedsatte problemløsningsevner og kritisk tænkning.
Q3. Kan en makro tage argumenter?
Svar:
Ja, makroer kan tage argumenter. For eksempel er MAX en makro, der tager to argumenter (a og b) og returnerer det maksimale af de to.
Q4. Kan makroer være rekursive?
Svar:
Nej, makroer kan ikke være rekursive. Hvis en makro bliver rekursiv, refererer definitionen til sig selv, og det vil føre til en uendelig løkke under forbehandling.