C:ssä a makro on ohjelman koodinpätkä, joka korvataan makron arvolla. Makro määritellään #määritellä direktiivi. Aina kun kääntäjä kohtaa makron nimen, se korvaa nimen makron määritelmällä. Makromääritelmiä ei tarvitse lopettaa puolipisteellä ( ; ).
Esimerkkejä C:n makroista
Alla on ohjelmat, jotka havainnollistavat makrojen käyttöä C:ssä:
Esimerkki 1
Alla oleva esimerkki osoittaa makrojen käytön LIMIT-arvon määrittämiseen.
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;> }> |
>
>Lähtö
The value of LIMIT is 5>
Esimerkki 2
Alla oleva esimerkki havainnollistaa makrojen käyttöä suorakulmion alueen löytämiseen.
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;> }> |
>
>Lähtö
Area of rectangle is: 50>
Selitys
Yllä olevasta ohjelmasta voimme nähdä sen aina, kun kääntäjä löytää ALUE(l, b) ohjelmassa se korvaa sen makron määritelmällä, eli (paunaa) . Arvot välitettiin makromalliin ALUE(l, b) korvataan myös lausunnolla (paunaa) . Siksi, ALUE(10; 5) tulee olemaan yhtä suuri kuin 10*5 .
C:n makrotyypit
C-kielessä on kahdenlaisia makroja:
1. Objektin kaltaiset makrot
Objektimainen makro on yksinkertainen tunniste, joka korvataan koodinpätkällä. Sitä kutsutaan objektimaiseksi, koska se näyttää esineeltä koodissa, joka käyttää sitä. Sitä käytetään yleisesti korvaamaan symbolinen nimi numeerisella / muuttujalla, joka esitetään vakiona.
Esimerkki
Alla oleva esimerkki havainnollistaa yksinkertaista makroa eli objektimaisia makroja.
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;> }> |
>
>Lähtö
Lockdown will be extended upto 31-MAY-2020>
2. Ketju makrot
Makrojen sisällä olevia makroja kutsutaan ketjumakroiksi. Ketjumakroissa laajennetaan ensin ylämakro ja sitten alamakro.
Esimerkki
Alla oleva ohjelma on esimerkki ketjumakrosta
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;> }> |
>
>Lähtö
Geeks for Geeks have 138K followers on Instagram>
Selitys:
INSTAGRAM laajennetaan ensin tuottamaan FOLLOWERS. Sitten laajennettu makro laajennetaan siten, että tuloksena on 138 kt. Tätä kutsutaan makrojen ketjuttamiseksi.
3. Moniriviset makrot
Oliomaisessa makrossa voi olla monirivinen. Joten jos haluat luoda monirivisen makron, sinun on käytettävä kenoviiva-newline-komentoa.
Esimerkki
Alla on monirivisten makrojen kuva:
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;> }> |
>
>Lähtö
Elements of Array are: 1 2 3>
4. Toiminnalliset makrot
Nämä makrot ovat samat kuin funktiokutsu. Se korvaa koko koodin funktion nimen sijaan. Sulkupari välittömästi makron nimen jälkeen on välttämätön. Jos laitamme makron nimen ja sulkeiden väliin makromäärittelyssä välilyönnin, silloin makro ei toimi .
Funktiomaista makroa pidennetään vain silloin, kun sen nimi näkyy suluilla sen jälkeen. Jos emme tee tätä, funktioosoitin saa oikean funktion osoitteen ja johtaa syntaksivirheeseen.
Esimerkki
Alla oleva esimerkki havainnollistaa funktion kaltaisia makroja
C
javalla on seuraava
// 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;> }> |
>
>Lähtö
Minimum value between 18 and 76 is 18>
Tässä on yksi esimerkki, joka auttaa ymmärtämään makroja paremmin:
Ongelma: Meidän on löydettävä ympyrän pinta-ala määrittämällä ALUE(r) Makrot.
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> |
>
>Lähtö
Area of Circle with radius 7: 153.938>
Johtopäätös
Makrot ovat pieniä koodinpätkiä, jotka voidaan suorittaa yhdellä komennolla. Niitä voidaan käyttää tehtävien automatisointiin, monimutkaisten prosessien yksinkertaistamiseen ja tuottavuuden parantamiseen. Makrojen käytössä on kuitenkin myös joitain haittoja. Tässä on joitain makrojen etuja ja haittoja:
Usein kysytyt kysymykset C-makroista
Q1. Mitkä ovat makrojen edut?
Vastaus:
Lisääntynyt tuottavuus: Makrot voivat säästää aikaa ja vähentää virheitä automatisoimalla toistuvia tehtäviä. Räätälöinti: Makrot voidaan räätälöidä erityistarpeiden mukaan, mikä mahdollistaa suuremman joustavuuden tehtävien suorittamisessa. Johdonmukaisuus: Makrot voivat auttaa varmistamaan tehtävien johdonmukaisuuden noudattamalla ennalta määritettyjä ohjeita. Tehokkuus: Makrot voivat suorittaa tehtäviä nopeammin kuin ihmiset, mikä parantaa yleistä tehokkuutta. Helppokäyttöisyys: Makrot on helppo luoda ja käyttää, ja ne vaativat vain vähän tai ei ollenkaan ohjelmointiosaamista
Q2. Mitkä ovat makrojen haitat?
Vastaus:
Tietoturvariskit: Makrot voivat olla turvallisuusriski, jos niitä ei ole suojattu kunnolla tai jos niitä käytetään haitallisen koodin suorittamiseen. Rajoitettu toiminnallisuus: Makrot eivät ehkä pysty suorittamaan monimutkaisempia tehtäviä, mikä rajoittaa niiden hyödyllisyyttä. Yhteensopivuusongelmat: Makrot eivät välttämättä ole yhteensopivia kaikkien ohjelmistosovellusten kanssa, mikä rajoittaa niiden käyttökelpoisuutta. Ylläpito: Makrot saattavat vaatia ylläpitoa ja päivityksiä, mikä voi olla aikaa vievää ja kallista. Riippuvuus: Liiallinen makroihin luottaminen voi heikentää ongelmanratkaisutaitoja ja kriittistä ajattelua.
Q3. Voiko makro ottaa argumentteja?
Vastaus:
Kyllä, makrot voivat ottaa argumentteja. Esimerkiksi MAX on makro, joka ottaa kaksi argumenttia (a ja b) ja palauttaa kahdesta suurimman.
Q4. Voivatko makrot olla rekursiivisia?
Vastaus:
Ei, makrot eivät voi olla rekursiivisia. Jos makro muuttuu rekursiiviseksi, määritelmä viittaa itseensä, ja se johtaa äärettömään silmukkaan esikäsittelyn aikana.