Forskellen mellem Inline og Macro i C ++

Forfatter: Laura McKinney
Oprettelsesdato: 2 April 2021
Opdateringsdato: 16 Kan 2024
Anonim
Forskellen mellem Inline og Macro i C ++ - Teknologi
Forskellen mellem Inline og Macro i C ++ - Teknologi

Indhold


Makro er en instruktion, der udvides på tidspunktet for dens påkaldelse. Funktioner kan også defineres som makroer. Tilsvarende udvides inline-funktionerne også på tidspunktet for dens påkaldelse. En primær forskel mellem inline- og makrofunktion er, at inline funktioner udvides i løbet af samling, og makroer udvides, når programmet behandles af præprocessor.

Lad os undersøge forskellen mellem inline og makro ved hjælp af sammenligningstabel.

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligningInlineMakro
Grundlæggende Inline-funktioner analyseres af compileren.Makroer udvides med forbehandleren.
Syntaksinline return_type funktionsnavn (parametre) {. . . }#definer makro_navn char_sequence
Brugte søgeordinline
#Definere
defineretDet kan defineres i eller uden for klassen.Det defineres altid i starten af ​​programmet.
EvalueringDet evaluerer argumentet kun én gang.Det evaluerer argumentet, hver gang det bruges i koden.
Udvidelse Compileren kan muligvis ikke inline og udvide alle funktionerne.Makroer udvides altid.
AutomatiseringDe korte funktioner, der er defineret i klassen, oprettes automatisk til inline-funktioner.Makroer skal defineres specifikt.
AdgangEn inline medlemsfunktion kan få adgang til klassens datamedlemmer.Makroer kan aldrig være klassemedlemmer og har ikke adgang til klassens datamedlemmer.
AfslutningDefinition af inline-funktion afsluttes med de krøllede konsoller i slutningen af ​​inline-funktionen.Definition af makro afsluttes med den nye linje.
FejlfindingFejlsøgning er let for en inline-funktion, da fejlkontrol udføres under kompilering.Fejlsøgning bliver vanskelig for makroer, da fejlkontrol ikke forekommer under kompilering.
BindingEn inline-funktion binder alle udsagn i funktionens krop meget godt, som funktionen af ​​kroppen starter og slutter med de krøllede parenteser.En makro står overfor bindingsproblemet, hvis den har mere end én påstand, da den ikke har noget afslutningsymbol.


Definition af inline

En inline-funktion ligner en almindelig funktion, men er efterfulgt af nøgleordet "inline”. Inline-funktioner er kortlængdefunktioner, der udvides på tidspunktet for dens påkaldelse i stedet for at blive kaldt. Lad os forstå inline-funktioner med et eksempel.

#omfatte ved hjælp af navneområde std; klasseeksempel {int a, b; offentligt: ​​inline void initialize (int x, int y) {a = x; b = y} ugyldig visning () {cout << a << "" <

I ovenstående program erklærede og definerede jeg funktionen initialiseret () som en inline funktion i klassen “eksempel”. Koden til initialiseringsfunktionen () udvides, hvor den påberåbes af objektet for klassen “eksempel”. Funktionsdisplayet (), der er defineret i klasseeksemplet, erklæres ikke inline, men det kan betragtes som inline af kompilatoren, som i C ++ foretages funktionen, der er defineret i klassen, automatisk inline af kompilatoren i betragtning af funktionens længde.


  • Inline-funktionen reducerer omkostningen af ​​opkald og returnering af funktion, hvilket igen reducerer udførelsestiden for programmet.Argumenterne skubbes også på stakken, og registre gemmes, når en funktion kaldes og nulstilles, når funktionen vender tilbage, hvilket tager tid, dette undgås af inline-funktionerne, da der ikke er behov for at oprette lokale variabler og formelle parametre hver gang .
  • Inline-funktioner kan være medlem af klassen og kan også få adgang til klassens datamedlem.
  • Inline-funktion reducerer programmets eksekveringstid, men hvis nogle gange længden af ​​inline-funktionen er større, øges programmets størrelse også på grund af den duplikerede kode. Derfor er det en god praksis at inline meget små funktioner.
  • Argumentet for inline-funktionen evalueres kun én gang.

Definition af makro

Makro er et "forarbejdningsdirektiv". Før kompilering undersøges programmet af forbehandleren, og når det nogensinde finder makroen i programmet, erstatter det makroen med dens definition. Derfor betragtes makroen som "erstatning". Lad os studere makro med et eksempel.

#omfatte #definer GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Større af 10 og 20 er" << GREATER ("20", "10") << " n"; retur 0; }

I ovenstående kode erklærede jeg en makrofunktion GREATER (), der sammenligner og finder det større antal af begge parametre. Du kan observere, at der ikke er noget semikolon til at afslutte makroen, da makroen kun afsluttes med den nye linje. Da en makro bare er en erstatning, udvider den makrokoden, hvor den påberåbes.

  • Makroerne defineres altid med store bogstaver bare for at gøre det nemt for programmererne at identificere alle makroerne i programmet, mens de læser.
  • Makroen kan aldrig være en klasses medlemsfunktion, og den kan heller ikke få adgang til datamedlemmerne i nogen klasse.
  • Makrofunktionen evaluerer argumentet, hver gang det vises i dens definition, hvilket resulterer i et uventet resultat.
  • Makro skal være af en mindre størrelse, da de større makroer unødigt øger størrelsen på koden.
  1. Den grundlæggende forskel mellem inline og makro er, at en inline-funktioner er parset af kompilatoren, mens makroerne i et program udvides med forbehandler.
  2. Det nøgleord, der bruges til at definere en inline-funktion, er "inlineMens det nøgleord, der bruges til at definere en makro, er "#Definere“.
  3. Når inline-funktionen er decalre inden for en klasse, kan den defineres enten i en klasse eller uden for en klasse. På den anden side defineres en makro altid ved starten af ​​programmet.
  4. Argumentet, der sendes til inline-funktionerne, evalueres kun én gang under kompilering, mens makrosargumentet evalueres, hver gang en makro bruges i koden.
  5. Compileren kan muligvis ikke inline og udvide alle de funktioner, der er defineret i en klasse. På den anden side udvides makroer altid.
  6. Den korte funktion, der er defineret i en klasse uden inline nøgleord, oprettes automatisk inline-funktioner. På den anden side skal makro defineres specifikt.
  7. En funktion, der er inline, kan få adgang til klassens medlemmer, mens en makro aldrig kan få adgang til klassens medlemmer.
  8. For at afslutte en inline-funktion kræves en lukket krøllestag, mens en makro afsluttes med starten af ​​en ny linje.
  9. Fejlsøgning bliver let for inlne-funktionen, da den kontrolleres under kompilering for eventuelle fejl. På den anden side er en makro ikke kontrolleret under kompilering, så det bliver vanskeligt at fejlsøge en makro.
  10. At være en funktion en inline funktion binder sine medlemmer inden for en start og lukkede krøllede seler. På den anden side har makro ikke noget terminalsymbol, så binding bliver vanskelig, når makroen indeholder mere end én erklæring.

konklusioner:

Inline-funktionerne er langt mere overbevisende end makrofunktion. C ++ giver også en bedre måde at definere en konstant, der bruger et "const" nøgleord.