logo

Makrá a ich typy v C

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.