Forskjellen mellom inline og makro i C ++

Forfatter: Laura McKinney
Opprettelsesdato: 2 April 2021
Oppdater Dato: 15 Kan 2024
Anonim
Inline functions Vs Preprocessor
Video: Inline functions Vs Preprocessor

Innhold


Makro er en instruksjon som utvides på tidspunktet for påkallelsen. Funksjoner kan også defineres, som makroer. Tilsvarende utvides inline-funksjonene også på tidspunktet for påkallelsen. En primær forskjell mellom inline og makrofunksjon er at inline-funksjoner utvides i løpet av kompilering, og makroer utvides når programmet behandles av preprosessor.

La oss studere forskjellen mellom inline og makro ved hjelp av sammenligningskart.

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningPå linjeMakro
grunn~~POS=TRUNC Innvendige funksjoner blir analysert av kompilatoren.Makroer utvides av forbehandleren.
syntaxinline return_type funksjonsnavn (parametere) {. . . }#definere makronavnnavn char_sequence
Nøkkelord bruktpå linje
#definere
definertDet kan defineres i eller utenfor klassen.Det er alltid definert ved starten av programmet.
evalueringDen evaluerer argumentet bare en gang.Den evaluerer argumentet hver gang det brukes i koden.
Ekspansjon Det kan hende at kompilatoren ikke inline og utvider alle funksjonene.Makroer utvides alltid.
AutomasjonDe korte funksjonene, som er definert i klassen, blir automatisk laget til inline-funksjoner.Makroer bør defineres spesifikt.
TilgangEn inline medlemsfunksjon får tilgang til klassemedlemmene.Makroer kan aldri være klassemedlemmer og har ikke tilgang til klassemedlemmene.
AvslutningDefinisjon av inline-funksjon avsluttes med de krøllete parentesene på slutten av inline-funksjonen.Definisjon av makro avsluttes med den nye linjen.
debuggingFeilsøking er enkelt for en inline-funksjon da feilsjekking gjøres under kompilering.Feilsøking blir vanskelig for makroer da feilkontroll ikke forekommer under kompilering.
bindingEn inline-funksjon binder alle utsagnene i kroppen til funksjonen veldig godt som kroppen av funksjonen starter og slutter med de krøllete parentesene.En makro står overfor bindingsproblemet hvis den har mer enn ett utsagn, da det ikke har noe avslutningsymbol.


Definisjon av Inline

En inline-funksjon ser ut som en vanlig funksjon, men er forutrettet av nøkkelordet "på linje“. Innvendige funksjoner er kortlengde-funksjoner som utvides ved innkallingspunktet, i stedet for å bli kalt. La oss forstå inline-funksjoner med et eksempel.

#inkludere bruker navneområde std; klasseeksempel {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} ugyldig visning () {cout << a << "" <

I programmet over erklærte og definerte jeg, funksjonen initialiseres (), som en inline-funksjon i klassen “eksempel”. Koden til initialiseringsfunksjonen () utvides der den blir påkalt av objektet til klassen "eksempel". Funksjonsvisningen (), definert i klasseeksemplet, erklæres ikke inline, men den kan betraktes som inline av kompilatoren, som i C ++ blir funksjonen som er definert i klassen automatisk gjort inline av kompilatoren med tanke på funksjonens lengde.


  • Inline-funksjonen reduserer overhead for funksjonskalling og retur som igjen reduserer utførelsestiden for programmet.Argumentene skyves også inn på bunken og registre blir lagret når en funksjon kalles og tilbakestilles når funksjonen kommer tilbake, noe som tar tid, dette unngås av inline-funksjonene da det ikke er behov for å lage lokale variabler og formelle parametere hver gang .
  • Inline-funksjoner kan være medlem av klassen og kan også få tilgang til datamedlemmet i klassen.
  • Inline-funksjon reduserer tidspunktet for utførelse av programmet, men hvis noen ganger lengden på inline-funksjonen er større, vil størrelsen på programmet også øke på grunn av den dupliserte koden. Derfor er det en god praksis å inline veldig små funksjoner.
  • Argumentasjonen for inline-funksjonen evalueres bare én gang.

Definisjon av makro

Makro er et "forbehandlingsdirektiv". Før kompilering blir programmet undersøkt av forbehandleren, og uansett hvor det finner makroen i programmet, erstatter det makroen etter definisjonen. Derfor blir makroen betraktet som "erstatningen". La oss studere makro med et eksempel.

#inkludere #definere STØRRE (a, b) ((a <b)? b: a) int main (void) {cout << "Større på 10 og 20 er" << STOR ("20", "10") << " n"; retur 0; }

I koden over erklærte jeg en makrofunksjon STOR (), som sammenligner og finner det største antallet av begge parametrene. Du kan observere at det ikke er noe semikolon for å avslutte makroen, da makroen bare avsluttes av den nye linjen. Siden en makro bare er en erstatning, utvider den makrokoden der den påberopes.

  • Makroene er alltid definert med store bokstaver bare for å gjøre det enkelt for programmererne å identifisere alle makroene i programmet mens du leser.
  • Makroen kan aldri være en klasses medlemsfunksjon, og den får heller ikke tilgang til datamedlemmer i noen klasse.
  • Makrofunksjonen evaluerer argumentet hver gang det vises i sin definisjon som resulterer i et uventet resultat.
  • Makro må være av en mindre størrelse, da de større makroene unødvendig vil øke størrelsen på koden.
  1. Den grunnleggende forskjellen mellom inline og makro er at en inline-funksjoner blir analysert av kompilatoren, mens makroene i et program utvides med en forprosessor.
  2. Nøkkelordet som brukes til å definere en inline-funksjon er "på linje"Mens nøkkelordet som brukes til å definere en makro, er"#definere“.
  3. Når inline-funksjonen er dekalert i en klasse, kan den defineres enten i en klasse eller utenfor en klasse. På den annen side er det alltid definert en makro ved starten av programmet.
  4. Argumentet som sendes til inline-funksjonene evalueres bare én gang under kompilering, mens makrosargumentet blir evaluert hver gang en makro brukes i koden.
  5. Det kan hende at kompilatoren ikke inline og utvider alle funksjonene som er definert i en klasse. På den annen side utvides makroer alltid.
  6. Den korte funksjonen som er definert i en klasse uten inline-nøkkelord, blir automatisk laget av inline-funksjoner. På den annen side bør makro defineres spesifikt.
  7. En funksjon som er inline kan få tilgang til medlemmene i klassen, mens en makro aldri kan få tilgang til medlemmene i klassen.
  8. For å avslutte en inline-funksjon kreves det en lukket krøllete stag, mens en makro avsluttes med starten av en ny linje.
  9. Feilsøking blir enkelt for inlne-funksjonen da det blir kontrollert under kompilering for eventuelle feil. På den annen side blir en makro ikke sjekket under kompilering, det blir vanskelig å feilsøke en makro.
  10. Å være en funksjon og en inline-funksjon binder medlemmene i en start og lukkede krøllete seler. På den annen side har ikke makro noe termineringssymbol, så binding blir vanskelig når makro inneholder mer enn en uttalelse.

konklusjoner:

Inline-funksjonene er langt mer overbevisende enn makrofunksjon. C ++ gir også en bedre måte å definere en konstant, som bruker et "const" -nøkkelord.