V C, a makro je kus kódu v programe, ktorý je nahradený hodnotou makra. Makro je definované pomocou #definovať smernice. Vždy, keď kompilátor narazí na názov makra, nahradí názov definíciou makra. Definície makier nemusia byť ukončené bodkočiarkou ( ; ).
Príklady makier v C
Nižšie sú uvedené programy na ilustráciu použitia makier v jazyku C:
Príklad 1
Nasledujúci príklad ukazuje použitie makier na definovanie 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;> }> |
>
>Výkon
The value of LIMIT is 5>
Príklad 2
Nasledujúci príklad ukazuje použitie makier na nájdenie oblasti obdĺžnika.
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;> }> |
>
>Výkon
Area of rectangle is: 50>
Vysvetlenie
Z vyššie uvedeného programu môžeme vidieť, že kedykoľvek kompilátor nájde AREA(l; b) v programe ho nahradí definíciou makier, t.j. (l*b) . Hodnoty odovzdané do šablóny makra AREA(l; b) bude tiež nahradené vyhlásením (l*b) . preto AREA(10; 5) sa bude rovnať 10*5 .
Typy makier v C
V jazyku C existujú dva typy makier:
1. Objektovo podobné makrá
Objektové makro je jednoduchý identifikátor, ktorý bude nahradený fragmentom kódu. Nazýva sa objektový, pretože vyzerá ako objekt v kóde, ktorý ho používa. S obľubou sa používa na nahradenie symbolického názvu číselnou/premennou reprezentovanou ako konštanta.
Príklad
Nižšie uvedený príklad je ilustráciou jednoduchého makra, t. j. objektovo podobných makier.
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;> }> |
>
>Výkon
Lockdown will be extended upto 31-MAY-2020>
2. Reťazové makrá
Makrá vo vnútri makier sa nazývajú reťazové makrá. V reťazových makrách sa najprv rozšíri rodičovské makro a potom sa rozšíri podriadené makro.
Príklad
Nižšie uvedený program je ilustráciou reťazového makra
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;> }> |
>
>Výkon
Geeks for Geeks have 138K followers on Instagram>
Vysvetlenie:
INSTAGRAM je rozšírený najskôr o produkciu FOLLOWERS. Potom sa rozšírené makro rozbalí, aby vytvorilo výsledok 138 kB. Toto sa nazýva reťazenie makier.
3. Viacriadkové makrá
Objektové makro môže mať viacriadkové. Takže na vytvorenie viacriadkového makra musíte použiť spätnú lomku-nový riadok.
Príklad
Nižšie je ilustrácia viacriadkových makier:
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;> }> |
>
>Výkon
Elements of Array are: 1 2 3>
4. Funkčné makrá
Tieto makrá sú rovnaké ako volanie funkcie. Namiesto názvu funkcie nahradí celý kód. Bezprostredne za názvom makra je potrebná dvojica zátvoriek. Ak dáme medzeru medzi názov makra a zátvorky v definícii makra, potom makro nebude fungovať .
Makro podobné funkcii sa predĺži len vtedy a len vtedy, ak sa za ním objaví jeho názov s párom zátvoriek. Ak to neurobíme, ukazovateľ funkcie získa adresu skutočnej funkcie a povedie k chybe syntaxe.
Príklad
Nižšie uvedený príklad je ilustráciou funkčných makier
C
c kód abs
// 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;> }> |
>
>Výkon
Minimum value between 18 and 76 is 18>
Tu je jeden príklad, ktorý lepšie pochopí makrá:
problém: Potrebujeme nájsť obsah kruhu definovaním AREA(r) Makrá.
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> |
>
>Výkon
Area of Circle with radius 7: 153.938>
Záver
Makrá sú malé časti kódu, ktoré možno spustiť jediným príkazom. Možno ich použiť na automatizáciu úloh, zjednodušenie zložitých procesov a zvýšenie produktivity. Používanie makier má však aj určité nevýhody. Tu sú niektoré z výhod a nevýhod makier:
Časté otázky o makrách C
Q1. Aké sú výhody makier?
odpoveď:
Zvýšená produktivita: Makrá môžu šetriť čas a znižovať chyby automatizáciou opakujúcich sa úloh. Prispôsobenie: Makrá je možné prispôsobiť tak, aby vyhovovali špecifickým potrebám, čo umožňuje väčšiu flexibilitu pri vykonávaní úloh. Konzistencia: Makrá môžu pomôcť zabezpečiť konzistentnosť úloh tým, že sa budú riadiť súborom vopred určených pokynov. Efektivita: Makrá môžu vykonávať úlohy rýchlejšie ako ľudia, čím sa zvyšuje celková efektivita. Jednoduché použitie: Makrá sa ľahko vytvárajú a používajú a vyžadujú si minimálne alebo žiadne znalosti programovania
Q2. Aké sú nevýhody makier?
odpoveď:
Bezpečnostné riziká: Makrá môžu predstavovať bezpečnostné riziko, ak nie sú správne zabezpečené alebo ak sa používajú na spúšťanie škodlivého kódu. Obmedzená funkčnosť: Makrá nemusia byť schopné vykonávať zložitejšie úlohy, čo obmedzuje ich užitočnosť. Problémy s kompatibilitou: Makrá nemusia byť kompatibilné so všetkými softvérovými aplikáciami, čo obmedzuje ich užitočnosť. Údržba: Makrá môžu vyžadovať údržbu a aktualizácie, čo môže byť časovo náročné a nákladné. Závislosť: Prílišné spoliehanie sa na makrá môže viesť k zníženiu schopností riešiť problémy a kritickému mysleniu.
Q3. Môže makro prijať argumenty?
odpoveď:
Áno, makrá môžu brať argumenty. Napríklad MAX je makro, ktoré preberá dva argumenty (a a b) a vracia maximum z nich.
Q4. Môžu byť makrá rekurzívne?
odpoveď:
Nie, makrá nemôžu byť rekurzívne. Ak sa makro stane rekurzívnym, definícia sa vzťahuje na seba a počas predbežného spracovania to povedie k nekonečnej slučke.