Priporočena, 2024

Izbira Urednika

Razlika med inline in makrom v C ++

Makro je navodilo, ki se širi v času njegovega klica. Funkcije lahko definiramo tudi, kot so makri. Podobno se tudi funkcije v vrstici razširijo na točki njenega klica. Primarna razlika med funkcijo inline in makro funkcijo je ta, da so funkcije v vrstici med prevajanjem razširjene in makri se razširijo, ko je program obdelan s predprocesorjem .

Preučimo razliko med inline in makro s pomočjo primerjalne tabele.

Primerjalna tabela

Podlaga za primerjavoV vrstiMakro
OsnovnoVgrajene funkcije razčleni prevajalnik.Makroje razširja s predprocesorjem.
Sintaksainline return_type funct_name (parametri) {. . . }#define macro_name char_sequence
Uporabljene ključne besedev vrsti
#define
DoločenoLahko je definiran znotraj ali zunaj razreda.Vedno je določen na začetku programa.
VrednotenjeArgument vrednoti samo enkrat.Vrednoti argument vsakič, ko ga uporabimo v kodi.
ŠiritevPrevajalnik ne sme vdelati in razširiti vseh funkcij.Makri so vedno razširjeni.
AvtomatizacijaKratke funkcije, definirane znotraj razreda, se samodejno izvedejo na inline funkcije.Makre je treba natančno opredeliti.
DostopFunkcija članov v vrstici lahko dostopa do podatkovnih članov razreda.Makri nikoli ne morejo biti člani razreda in ne morejo dostopati do podatkovnih članov razreda.
PrekinitevFunkcija definicije inline se konča s kodrastimi oklepaji na koncu funkcije inline.Opredelitev makra se zaključi z novo vrstico.
Odpravljanje napakOdpravljanje napak je enostavno za inline funkcijo, saj se preverjanje napak izvede med prevajanjem.Odpravljanje napak postane težko za makre, saj med prevajanjem ne pride do preverjanja napak.
VezavaFunkcija inline povezuje vse stavke v telesu funkcije zelo dobro kot telo funkcije in se konča s kodrastimi oklepaji.Makro se sooča s problemom vezave, če ima več kot en stavek, saj nima terminacijskega simbola.

Opredelitev inline

Funkcija inline izgleda kot redna funkcija, vendar pred njo pride ključna beseda » inline «. Vgrajene funkcije so funkcije kratke dolžine, ki se razširijo na točki njenega klica, namesto da se kličejo. Razumimo inline funkcije z zgledom.

 #include using namespace std; primer razreda {int a, b; public: inline void inicializira (int x, int y) {a = x; b = y} void display () {cout << a << "< 

V zgornjem programu sem deklariral in definiral inicializacijo funkcije (), kot funkcijo inline v razredu »primer«. Koda funkcije inicializacije () se bo razširila tam, kjer jo kliče objekt razreda "primer". Funkcija display (), definirana v primeru razreda, ni deklarirana, vendar jo lahko prevajalnik obravnava kot vrstnega reda, v C ++ funkcija, ki je definirana v razredu, se avtomatsko vnese s strani prevajalnika glede na dolžino funkcije.

  • Funkcija inline zmanjša obremenitev funkcije klicanja in vračanja, kar zmanjša čas izvajanja programa. Tudi argumenti so potisnjeni na sklad in registri se shranijo, ko je funkcija klicana in ponastavljena, ko se funkcija vrne, kar zahteva čas, to se izogne ​​z inline funkcijami, ker ni potrebe po ustvarjanju lokalnih spremenljivk in formalnih parametrov. .
  • Vgrajene funkcije so lahko član razreda in lahko dostopajo tudi do podatkovnega člana razreda.
  • Inline funkcija skrajša čas izvajanja programa, včasih pa, če je dolžina inline funkcije večja, se bo zaradi podvojene kode povečala tudi velikost programa. Zato je dobra praksa, da vključite zelo majhne funkcije.
  • Argument funkcije inline se oceni samo enkrat.

Opredelitev makra

Makro je »predprocesorska direktiva«. Pred kompilacijo program pregleduje predprocesor in kjer koli najde makro v programu, zamenja ta makro s svojo definicijo. Zato se makro obravnava kot »zamenjava besedila«. Preučimo makro z zgledom.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Večji od 10 in 20 je" << GREATER ("20", "10") << "\ t return 0; } 

V zgornji kodi sem deklariral makro funkcijo GREATER (), ki primerja in najde večje število obeh parametrov. Opazite lahko, da ni nobenega podpičja za zaključek makra, ker se makro prekine samo z novo vrstico. Ker je makro samo zamenjava besedila, bo razširil kodo makra, na katerem je bil priklican.

  • Makroje so vedno definirane z velikimi tiskanimi črkami, da bi programerji lažje prepoznali vse makre v programu med branjem.
  • Makro nikoli ne more biti funkcija člana razreda, niti ne more dostopati do podatkovnih članov kateregakoli razreda.
  • Makro funkcija oceni argument vsakič, ko se pojavi v definiciji, kar povzroči nepričakovani rezultat.
  • Makro mora biti manjše velikosti, saj bodo večji makri po nepotrebnem povečali velikost kode.

Ključne razlike med vrstico in makrom

  1. Osnovna razlika med inline in makrom je v tem, da prevajalnik razčleni inline funkcije, medtem ko so makri v programu razširjeni s preprocesorjem.
  2. Ključna beseda, ki se uporablja za definiranje vgrajene funkcije, je » inline «, medtem ko je ključna beseda, ki se uporablja za definiranje makra, » #define «.
  3. Ko je notranja funkcija deklarirana znotraj razreda, jo je mogoče definirati znotraj razreda ali izven razreda. Po drugi strani pa je makro vedno definiran na začetku programa.
  4. Argument, ki je posredovan funkcijam v vrstici, se med prevajanjem oceni samo enkrat, medtem ko se argument makrov oceni vsakič, ko se v kodi uporabi makro.
  5. Prevajalnik ne sme vdelati in razširiti vseh funkcij, definiranih znotraj razreda. Po drugi strani pa so makri vedno razširjeni.
  6. Kratka funkcija, ki je definirana znotraj razreda brez ključne besede, je samodejno izdelana inline funkcije. Po drugi strani pa je treba natančno opredeliti makro.
  7. Funkcija, ki je vgrajena, lahko dostopa do članov razreda, medtem ko makro nikoli ne more dostopati do članov razreda.
  8. Za zaključitev funkcije inline je potrebna zaprta zavita oklepaja, medtem ko se makro zaključi z začetkom nove vrstice.
  9. Odpravljanje napak postane preprosto za funkcijo inlne, saj se med prevajanjem preverja morebitna napaka. Po drugi strani pa makro med prevajanjem ni preverjen, zato je debuganje makra težko.
  10. Funkcija je funkcija, ki povezuje člane znotraj začetka in zapira zavite oklepaje. Po drugi strani pa makro nima nobenega terminacijskega simbola, zato postane vezava težavna, ko makro vsebuje več izjav.

Sklepi:

Vgrajene funkcije so veliko bolj prepričljive kot makro funkcije. C ++ ponuja tudi boljši način za definiranje konstante, ki uporablja ključno besedo »const«.

Top