logo

Makri in njihove vrste v C

V C, a makro je del kode v programu, ki je nadomeščen z vrednostjo makra. Makro definira #definiraj direktiva. Kadarkoli prevajalnik naleti na ime makra, ga nadomesti z definicijo makra. Definicij makrov ni treba zaključiti s podpičjem( ; ).

Primeri makrov v C

Spodaj so programi za ponazoritev uporabe makrov v C:



Primer 1

Spodnji primer prikazuje uporabo makrov za definiranje 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;> }>

>

>

Izhod

The value of LIMIT is 5>

Primer 2

Spodnji primer prikazuje uporabo makrov za iskanje površine pravokotnika.

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;> }>

>

>

Izhod

Area of rectangle is: 50>

Pojasnilo
Iz zgornjega programa lahko vidimo, da kadar koli prevajalnik najde OBMOČJE(l, b) v programu ga nadomesti z definicijo makra, tj. (l*b) . Vrednosti, posredovane predlogi makra OBMOČJE(l, b) bo nadomestila tudi izjava (l*b) . zato OBMOČJE (10, 5) bo enako 10*5 .

Vrste makrov v C

V jeziku C obstajata dve vrsti makrov:

1. Predmetom podobni makri

Objektu podoben makro je preprost identifikator, ki ga bo nadomestil fragment kode. Imenuje se podoben objektu, ker je videti kot predmet v kodi, ki ga uporablja. Pogosto se uporablja za zamenjavo simboličnega imena s številsko/spremenljivko, predstavljeno kot konstanta.

Primer

Spodnji primer je ilustracija preprostega makra, tj. predmetom podobnih makrov.

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;> }>

>

>

Izhod

Lockdown will be extended upto 31-MAY-2020>

2. Verižni makri

Makri znotraj makra se imenujejo verižni makri. V verižnih makroh se najprej razširi nadrejeni makro, nato pa se razširi podrejeni makro.

Primer

Spodnji program je ilustracija verižnega 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;> }>

>

>

Izhod

Geeks for Geeks have 138K followers on Instagram>

Pojasnilo:
INSTAGRAM je najprej razširjen, da ustvari SPREMLJEVALCE. Nato se razširjeni makro razširi, da ustvari rezultat kot 138K. To se imenuje veriženje makrov.

3. Večvrstični makri

Predmetu podoben makro bi lahko imel več vrstic. Torej, če želite ustvariti večvrstični makro, morate uporabiti poševnico nazaj in novo vrstico.

Primer

Spodaj je ilustracija večvrstičnih makrov:

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;> }>

>

>

Izhod

Elements of Array are: 1 2 3>

4. Funkcijam podobni makri

Ti makri so enaki kot klic funkcije. Namesto imena funkcije nadomesti celotno kodo. Par oklepajev takoj za imenom makra je potreben. če med ime makra in oklepaje v definiciji makra vstavimo presledek, potem makro ne bo deloval .
Makro, podoben funkciji, se podaljša samo, če in samo če se njegovo ime pojavi s parom oklepajev za njim. Če tega ne storimo, bo kazalec funkcije dobil naslov prave funkcije in povzročil sintaktično napako.

Primer

Spodnji primer je ilustracija funkcijskih makrov

C


'kakšna je razlika med levom in tigrom'



// 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;> }>

>

>

Izhod

Minimum value between 18 and 76 is 18>

Tukaj je en primer, ki bo dal boljše razumevanje makrov:

Težava: Z definiranjem moramo najti ploščino kroga OBMOČJE(r) Makri.

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>

>

>

Izhod

Area of Circle with radius 7: 153.938>

Zaključek

Makri so majhni delčki kode, ki jih je mogoče izvesti z enim samim ukazom. Uporabljajo se lahko za avtomatizacijo opravil, poenostavitev kompleksnih procesov in izboljšanje produktivnosti. Vendar pa ima uporaba makrov tudi nekaj slabosti. Tukaj je nekaj prednosti in slabosti makrov:

Pogosta vprašanja o C Macros

Q1. Kakšne so prednosti makrov?

odgovor:

    Povečana produktivnost: Makri lahko prihranijo čas in zmanjšajo napake z avtomatizacijo ponavljajočih se opravil. Prilagajanje: Makre je mogoče prilagoditi posebnim potrebam, kar omogoča večjo prilagodljivost pri izvajanju nalog. Doslednost: Makri lahko pomagajo zagotoviti doslednost pri opravilih z upoštevanjem nabora vnaprej določenih navodil. Učinkovitost: Makri lahko naloge opravljajo hitreje kot ljudje, kar izboljša splošno učinkovitost. Enostavnost uporabe: makre je enostavno ustvariti in uporabljati ter zahtevajo malo ali nič programskega znanja

Q2. Kakšne so slabosti makrov?

odgovor:

    Varnostna tveganja: Makri so lahko varnostno tveganje, če niso ustrezno zavarovani ali če se uporabljajo za izvajanje zlonamerne kode. Omejena funkcionalnost: Makri morda ne bodo mogli izvajati bolj zapletenih nalog, kar omejuje njihovo uporabnost. Težave z združljivostjo: Makri morda niso združljivi z vsemi programskimi aplikacijami, kar omejuje njihovo uporabnost. Vzdrževanje: Makri lahko zahtevajo vzdrževanje in posodobitve, kar je lahko dolgotrajno in drago. Odvisnost: Pretirano zanašanje na makre lahko povzroči zmanjšane sposobnosti reševanja problemov in kritično mišljenje.

Q3. Ali lahko makro sprejme argumente?

odgovor:

Da, makri lahko sprejemajo argumente. Na primer, MAX je makro, ki sprejme dva argumenta (a in b) in vrne največje število obeh.

Q4. Ali so lahko makri rekurzivni?

odgovor:

Ne, makri ne morejo biti rekurzivni. Če makro postane rekurziven, se definicija nanaša na samega sebe, kar bo vodilo do neskončne zanke med predprocesiranjem.