C, a makro ir koda daļa programmā, kas tiek aizstāta ar makro vērtību. Makro ir definēts ar #definēt direktīva. Ikreiz, kad kompilators saskaras ar makro nosaukumu, tas aizstāj nosaukumu ar makro definīciju. Makro definīcijas nav jābeidz ar semikolu ( ; ).
Makro piemēri C
Tālāk ir norādītas programmas, kas ilustrē makro izmantošanu programmā C:
1. piemērs
Tālāk sniegtajā piemērā ir parādīta makro izmantošana, lai definētu 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;> }> |
>
>Izvade
The value of LIMIT is 5>
2. piemērs
Tālāk sniegtajā piemērā ir parādīta makro izmantošana, lai atrastu taisnstūra laukumu.
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;> }> |
>
>Izvade
Area of rectangle is: 50>
Paskaidrojums
No iepriekš minētās programmas mēs to varam redzēt ikreiz, kad kompilators atrod AREA(l, b) programmā tas aizstāj to ar makro definīciju, t.i., (Mārciņas) . Vērtības tiek nodotas makro veidnei AREA(l, b) tiks aizstāts arī ar paziņojumu (Mārciņas) . Tāpēc AREA(10, 5) būs vienāds ar 10*5 .
Makro veidi C
C valodā ir divu veidu makro:
1. Objektiem līdzīgi makro
Objektam līdzīgs makro ir vienkāršs identifikators, kas tiks aizstāts ar koda fragmentu. To sauc par objektu līdzīgu, jo tas izskatās kā objekts kodā, kas to izmanto. To plaši izmanto, lai simbolisku nosaukumu aizstātu ar skaitlisku/mainīgo, kas attēlots kā konstante.
Piemērs
Tālāk sniegtajā piemērā ir ilustrēts vienkāršs makro, t.i., objektiem līdzīgi makro.
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;> }> |
>
>Izvade
Lockdown will be extended upto 31-MAY-2020>
2. Ķēdes makro
Makro makros tiek saukti par ķēdes makro. Ķēdes makro vispirms tiek izvērsts vecāku makro, pēc tam tiek izvērsts pakārtotais makro.
Piemērs
Tālāk redzamā programma ir ķēdes makro ilustrācija
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;> }> |
>
>Izvade
Geeks for Geeks have 138K followers on Instagram>
Paskaidrojums:
INSTAGRAM vispirms tiek paplašināts, lai izveidotu FOLLOWERS. Pēc tam paplašinātais makro tiek paplašināts, lai iegūtu rezultātu 138 K. To sauc par makro ķēdi.
3. Daudzrindu makro
Objektam līdzīgam makro varētu būt daudzrindu. Tātad, lai izveidotu vairāku rindiņu makro, ir jāizmanto atpakaļvērstā slīpsvītra-jaunrinda.
Piemērs
Tālāk ir sniegts vairāku rindu makro ilustrācija:
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;> }> |
>
>Izvade
Elements of Array are: 1 2 3>
4. Funkcijām līdzīgi makro
Šie makro ir tādi paši kā funkciju izsaukums. Tas aizstāj visu kodu, nevis funkcijas nosaukumu. Nepieciešams iekavu pāris uzreiz aiz makro nosaukuma. Ja makro definīcijā ievietojam atstarpi starp makro nosaukumu un iekavām, tad makro nedarbosies .
Funkcijai līdzīgs makro tiek pagarināts tikai tad un tikai tad, ja tā nosaukums parādās ar iekavām aiz tā. Ja mēs to nedarīsim, funkcijas rādītājs iegūs reālās funkcijas adresi un radīs sintakses kļūdu.
Piemērs
Tālāk redzamais piemērs ir funkcijai līdzīgu makro ilustrācija
C
virkne uz jsonobject
// 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;> }> |
>
>Izvade
Minimum value between 18 and 76 is 18>
Šeit ir viens piemērs, kas sniegs labāku izpratni par makro:
Problēma: Mums ir jāatrod apļa laukums, definējot AREA(r) Makro.
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> |
>
>Izvade
Area of Circle with radius 7: 153.938>
Secinājums
Makro ir mazas koda daļas, kuras var izpildīt ar vienu komandu. Tos var izmantot, lai automatizētu uzdevumus, vienkāršotu sarežģītus procesus un uzlabotu produktivitāti. Tomēr makro izmantošanai ir arī daži trūkumi. Šeit ir dažas makro priekšrocības un trūkumi:
Bieži uzdotie jautājumi par C makro
Q1. Kādas ir makro priekšrocības?
Atbilde:
Paaugstināta produktivitāte: Makro var ietaupīt laiku un samazināt kļūdas, automatizējot atkārtotus uzdevumus. Pielāgošana: Makro var pielāgot, lai tie atbilstu īpašām vajadzībām, nodrošinot lielāku elastību uzdevumu izpildē. Konsekvence: Makro var palīdzēt nodrošināt uzdevumu konsekvenci, izpildot iepriekš noteiktu norādījumu kopu. Efektivitāte: makro var veikt uzdevumus ātrāk nekā cilvēki, tādējādi uzlabojot kopējo efektivitāti. Lietošanas vienkāršība: Makro ir viegli izveidojami un lietojami, un tiem nav nepieciešamas programmēšanas zināšanas vai tās nav vajadzīgas
Q2. Kādi ir makro trūkumi?
Atbilde:
Drošības riski: Makro var būt drošības risks, ja tie nav pareizi aizsargāti vai tiek izmantoti ļaunprātīga koda izpildei. Ierobežota funkcionalitāte: makro var nespēt veikt sarežģītākus uzdevumus, tādējādi ierobežojot to lietderību. Saderības problēmas: Makro var nebūt saderīgi ar visām lietojumprogrammām, tādējādi ierobežojot to lietderību. Apkope: Makro var būt nepieciešama apkope un atjauninājumi, kas var būt laikietilpīgi un dārgi. Atkarība: pārmērīga paļaušanās uz makro var samazināt problēmu risināšanas prasmes un kritisko domāšanu.
Q3. Vai makro var pieņemt argumentus?
Atbilde:
Jā, makro var pieņemt argumentus. Piemēram, MAX ir makro, kas izmanto divus argumentus (a un b) un atgriež maksimālo no diviem argumentiem.
Q4. Vai makro var būt rekursīvi?
Atbilde:
Nē, makro nevar būt rekursīvi. Ja makro kļūst rekursīvs, definīcija attiecas uz sevi un priekšapstrādes laikā novedīs pie bezgalīgas cilpas.