Makra a jejich typy v C
V C, a makro je kus kódu v programu, který je nahrazen hodnotou makra. Makro je definováno pomocí #definovat směrnice. Kdykoli kompilátor narazí na název makra, nahradí tento název definicí makra. Definice maker nemusí být ukončeny středníkem ( ; ).
Příklady maker v C
Níže jsou uvedeny programy pro ilustraci použití maker v C:
Příklad 1
Níže uvedený příklad ukazuje použití maker k definování 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ýstup
The value of LIMIT is 5
Příklad 2
Níže uvedený příklad ukazuje použití maker k nalezení oblasti obdélníku.
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ýstup
Area of rectangle is: 50
Vysvětlení
Z výše uvedeného programu můžeme vidět, že kdykoli kompilátor najde AREA(l; b) v programu jej nahradí definicí maker, tj. (l*b) . Hodnoty předané do šablony makra AREA(l; b) bude rovněž nahrazeno prohlášením (l*b) . Proto, AREA(10; 5) se bude rovnat 10*5 .
Typy maker v C
V jazyce C existují dva typy maker:
1. Objektová makra
Objektové makro je jednoduchý identifikátor, který bude nahrazen fragmentem kódu. Říká se mu objektové, protože vypadá jako objekt v kódu, který ho používá. S oblibou se používá k nahrazení symbolického jména číselnou/proměnnou reprezentovanou jako konstanta.
Příklad
Níže uvedený příklad je ilustrací jednoduchého makra, tj. objektových maker.
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ýstup
Lockdown will be extended upto 31-MAY-2020
2. Řetězová makra
Makra uvnitř maker se nazývají řetězová makra. V řetězových makrech je nejprve rozbaleno rodičovské makro a poté podřízené makro.
Příklad
Níže uvedený program je ilustrací řetězové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ýstup
Geeks for Geeks have 138K followers on Instagram
Vysvětlení:
INSTAGRAM se rozšiřuje nejprve o FOLLOWERS. Potom se rozbalené makro rozbalí a vytvoří výsledek jako 138 kB. Tomu se říká řetězení maker.
3. Víceřádková makra
Objektové makro může mít víceřádkové. Chcete-li tedy vytvořit víceřádkové makro, musíte použít zpětné lomítko-nový řádek.
Příklad
Níže je ilustrace víceřádkových maker:
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ýstup
Elements of Array are: 1 2 3
4. Funkční makra
Tato makra jsou stejná jako volání funkce. Nahrazuje celý kód namísto názvu funkce. Dvojice závorek bezprostředně za názvem makra je nezbytná. Li dáme mezeru mezi název makra a závorky v definici makra, pak makro nebude fungovat .
Makro podobné funkci se prodlouží pouze tehdy, když se jeho název objeví s párem závorek za ním. Pokud to neuděláme, ukazatel funkce získá adresu skutečné funkce a povede k chybě syntaxe.
Příklad
Níže uvedený příklad je ilustrace funkcí podobných maker
C
// 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ýstup
Minimum value between 18 and 76 is 18
Zde je jeden příklad, který lépe pochopí makra:
Problém: Potřebujeme najít obsah kruhu definováním AREA(r) Makra.
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ýstup
Area of Circle with radius 7: 153.938
Závěr
Makra jsou malé kousky kódu, které lze spustit jediným příkazem. Lze je použít k automatizaci úkolů, zjednodušení složitých procesů a zvýšení produktivity. Používání maker má však také některé nevýhody. Zde jsou některé z výhod a nevýhod maker:
Nejčastější dotazy k makrům C
Q1. Jaké jsou výhody maker?
Odpovědět:
Vyšší produktivita: Makra mohou ušetřit čas a snížit chyby automatizací opakujících se úloh. Přizpůsobení: Makra lze přizpůsobit konkrétním potřebám, což umožňuje větší flexibilitu při provádění úkolů. Konzistence: Makra mohou pomoci zajistit konzistenci úkolů tím, že se budou řídit sadou předem určených pokynů. Efektivita: Makra mohou provádět úkoly rychleji než lidé, což zlepšuje celkovou efektivitu. Snadné použití: Makra se snadno vytvářejí a používají a vyžadují minimální nebo žádné znalosti programování
Q2. Jaké jsou nevýhody maker?
Odpovědět:
Bezpečnostní rizika: Makra mohou představovat bezpečnostní riziko, pokud nejsou řádně zabezpečena nebo pokud se používají ke spouštění škodlivého kódu. Omezená funkčnost: Makra nemusí být schopna provádět složitější úkoly, což omezuje jejich užitečnost. Problémy s kompatibilitou: Makra nemusí být kompatibilní se všemi softwarovými aplikacemi, což omezuje jejich užitečnost. Údržba: Makra mohou vyžadovat údržbu a aktualizace, což může být časově náročné a nákladné. Závislost: Přílišné spoléhání na makra může mít za následek snížení schopnosti řešit problémy a kritického myšlení.
Q3. Může makro přijmout argumenty?
Odpovědět:
Ano, makra mohou přijímat argumenty. Například MAX je makro, které přebírá dva argumenty (a a b) a vrací maximum ze dvou.
Q4. Mohou být makra rekurzivní?
Odpovědět:
Ne, makra nemohou být rekurzivní. Pokud se makro stane rekurzivním, pak definice odkazuje sama na sebe a během předběžného zpracování to povede k nekonečné smyčce.