Razlika med linijo in makro v C ++

Avtor: Laura McKinney
Datum Ustvarjanja: 2 April 2021
Datum Posodobitve: 14 Maj 2024
Anonim
High Density 2022
Video.: High Density 2022

Vsebina


Makro je navodilo, ki se razširi v času priklica. Funkcije lahko definirate tudi, kot makri. Prav tako se vmesne funkcije razširijo tudi na mestu njenega priklica. Glavna razlika med linijsko in makro funkcijo je, da je vgrajene funkcije se med kompilacija, in makroi se razširijo, ko program obdela program predprocesor.

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

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavoV vrstiMakro
Osnovni Vgrajene funkcije razdeli prevajalnik.Makroje razširil predprocesor.
Sintaksainline return_type funct_name (parametri) {. . . }#define makro_ime char_sequence
Uporabljene ključne besedev vrsti
#define
DoločenaDoločite ga lahko znotraj ali zunaj razreda.Vedno je opredeljen na začetku programa.
VrednotenjeArgument oceni samo enkrat.Argument oceni vsakič, ko je uporabljen v kodi.
Razširitev Prevajalnik ne more vgraditi in razširiti vseh funkcij.Makroni so vedno razširjeni.
AvtomatizacijaKratke funkcije, definirane znotraj razreda, se samodejno opravijo na vgrajene funkcije.Makrone je treba določiti posebej.
DostopanjeFunkcija vdelanega člana lahko dostopa do podatkovnih članov razreda.Makroni nikoli ne morejo biti člani razreda in ne morejo dostopati do podatkovnih članov razreda.
PrekinitevOpredelitev vgrajene funkcije se konča s kodranimi oklepaji na koncu vdelane funkcije.Opredelitev makra se konča z novo vrstico.
Odpravljanje napakOdpravljanje napak je enostavno za funkcijo vgrajenega, saj preverjanje napak poteka med prevajanjem.Odpravljanje napak postane makrov težavno, saj preverjanje napak med prevajanjem ne pride.
VezavaVgrajena funkcija zelo dobro veže vse stavke v telesu funkcije, saj se telo funkcije začne in konča s kodranimi oklepaji.Makro se spopada s težavo vezave, če ima več stavkov, saj nima zaključnega simbola.


Opredelitev Inline

Vgrajena funkcija je videti kot običajna funkcija, pred njo pa je ključna beseda „v vrsti". Vroče funkcije so funkcije kratke dolžine, ki se razširijo na mestu njenega priklica, namesto da bi jih poklicali. Razumejmo vgrajene funkcije s primerom.

#include uporaba imenskega prostora std; primer razreda {int a, b; javni: inline inid void Initialize (int x, int y) {a = x; b = y} razveljavitveni prikaz () {cout << a << "" <

V zgornjem programu sem deklariral in definiral funkcijo Initialize () kot vhodno funkcijo v razredu "example". Koda funkcije inicializacije () se bo razširila tam, kjer jo prikliče objekt razreda "primer". Zaslon funkcije (), opredeljen v primeru razreda, ni objavljen v liniji, vendar ga prevajalnik lahko šteje kot inline v C ++ funkcijo, definirano znotraj razreda, samodejno postavi inline s strani prevajalnika glede na dolžino funkcije.


  • Funkcija vgrajevanja zmanjša režijske stroške klica in vrnitve funkcije, kar posledično skrajša čas izvajanja programa.Prav tako se argumenti potisnejo na sklad in se registri shranijo, ko se funkcija pokliče in ponastavi, ko se funkcija vrne, kar potrebuje čas, temu pa se izognejo vgrajene funkcije, saj ni treba vsakič ustvarjati lokalnih spremenljivk in formalnih parametrov. .
  • Vgrajene funkcije so lahko član razreda in lahko dostopajo tudi do podatkovnega člana razreda.
  • Funkcija vgrajevanja skrajša čas izvajanja programa, vendar je včasih, če je dolžina vdelane funkcije večja, velikost programa povečala tudi zaradi podvojene kode. Zato je dobra praksa, da vključimo zelo majhne funkcije.
  • Argument funkcije vgrajene je ovrednoten samo enkrat.

Opredelitev makra

Makro je „direktiva o predprocesorjih“. Pred kompilacijo program pregleda predhodnik in kjerkoli najde makro v programu, ga nadomešča po svoji definiciji. Zato se makro šteje za "nadomestek". Preučimo makro s primerom.

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

V zgornji kodi sem razglasil funkcijo makro GREATER (), ki primerja in najdem večje število obeh parametrov. Lahko opazite, da ni podpičja, ki bi zaključil makro, saj makro ukine samo nova vrstica. Ker je makro samo nadomestek, bo razširil kodo makra, kjer se prikliče.

  • Makroni so vedno definirani z velikimi tiskanimi črkami, da programerjem med branjem olajšajo prepoznavanje vseh makrov v programu.
  • Makro nikoli ne more biti funkcija člana razreda in ne more dostopati do podatkovnih članov katerega koli razreda.
  • Funkcija makro ovrednoti argument vsakič, ko se pojavi v svoji definiciji, kar ima za posledico nepričakovan rezultat.
  • Makro mora biti manjše velikosti, saj bodo večji makri po nepotrebnem povečevali velikost kode.
  1. Osnovna razlika med inline in makro je, da prevajalnik analizira vgrajene funkcije, medtem ko makrone v programu razširi predprocesor.
  2. Ključna beseda, ki se uporablja za določitev vgrajene funkcije, je "v vrsti"Ker je ključna beseda, ki se uporablja za določanje makra,"#define“.
  3. Ko je vgrajena funkcija decalre znotraj razreda, jo lahko določimo znotraj razreda ali zunaj njega. Po drugi strani je makro vedno definiran na začetku programa.
  4. Argument, posredovan v vgrajene funkcije, se med kompilacijo ovrednoti le enkrat, medtem ko se argument makrov ovrednoti vsakič, ko se v kodi uporabi makro.
  5. Prevajalnik ne sme vgraditi in razširiti vseh funkcij, definiranih znotraj razreda. Po drugi strani pa so makri vedno razširjeni.
  6. Kratke funkcije, ki so definirane v razredu brez inline ključne besede, se samodejno izvedejo inline funkcije. Po drugi strani pa je treba makro določiti posebej.
  7. Inline funkcija lahko dostopa do članov razreda, medtem ko makro nikoli ne more dostopati do članov razreda.
  8. Za prekinitev vmesne funkcije je potrebna zaprta zavojna zaporedja, medtem ko se makro zaključi z začetkom nove vrstice.
  9. Odpravljanje napak postane enostavno za funkcijo inlne, saj se med kompilacijo preveri, ali je prišlo do kakršnih koli napak. Po drugi strani se makro ne preverja med kompilacijo, zato odpravljanje napak v makru postane težko.
  10. Funkcija je vgrajena funkcija, ki zaveže svoje člane v začetnih in zaprtih kodrastih naramnicah. Po drugi strani makro nima nobenega simbola zaključka, zato postane vezava težavna, ko makro vsebuje več kot en stavek.

Sklepi:

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