Forskjellen mellom inline og makro i C ++
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.
- Sammenligningstabell
- Definisjon
- Viktige forskjeller
- Konklusjon
Sammenligningstabell
Grunnlag for sammenligning | På linje | Makro |
---|---|---|
grunn~~POS=TRUNC | Innvendige funksjoner blir analysert av kompilatoren. | Makroer utvides av forbehandleren. |
syntax | inline return_type funksjonsnavn (parametere) {. . . } | #definere makronavnnavn char_sequence |
Nøkkelord brukt | på linje | #definere |
definert | Det kan defineres i eller utenfor klassen. | Det er alltid definert ved starten av programmet. |
evaluering | Den 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. |
Automasjon | De korte funksjonene, som er definert i klassen, blir automatisk laget til inline-funksjoner. | Makroer bør defineres spesifikt. |
Tilgang | En inline medlemsfunksjon får tilgang til klassemedlemmene. | Makroer kan aldri være klassemedlemmer og har ikke tilgang til klassemedlemmene. |
Avslutning | Definisjon av inline-funksjon avsluttes med de krøllete parentesene på slutten av inline-funksjonen. | Definisjon av makro avsluttes med den nye linjen. |
debugging | Feilsø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. |
binding | En 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 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. 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 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. Inline-funksjonene er langt mer overbevisende enn makrofunksjon. C ++ gir også en bedre måte å definere en konstant, som bruker et "const" -nøkkelord.
Definisjon av makro
konklusjoner: