logo

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


příkaz autocad stretch



// 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.