Lad os studere forskellen mellem inline og makro ved hjælp af sammenligning diagram.
Sammenligningstabel
Grundlag for sammenligning | Inline | Makro |
---|---|---|
Grundlæggende | Inline-funktioner analyseres af kompilatoren. | Makroer udvides af præprocessoren. |
Syntaks | inline return_type funct_name (parametre) {. . . } | #define macro_name char_sequence |
Nøgleord Brugt | inline | #Definere |
defineret | Det kan defineres inden for eller uden for klassen. | Det er altid defineret i starten af programmet. |
Evaluering | Det vurderer argumentet kun én gang. | Det vurderer argumentet hver gang det bruges i koden. |
Udvidelse | Kompilatoren må ikke indlejre og udvide alle funktionerne. | Makroer udvides altid. |
Automatisering | De korte funktioner, der er defineret inde i klassen, laves automatisk på inline-funktioner. | Makroer skal defineres specifikt. |
Adgang | En inline-medlemsfunktion kan få adgang til klassens data medlemmer. | Makroer kan aldrig være medlemmer af klassen og kan ikke få adgang til data medlemmer af klassen. |
Afslutning | Definition af inline-funktion afsluttes med de krøllede parenteser ved afslutningen af inline-funktionen. | Definition af makro ophører med den nye linje. |
debugging | Fejlfinding er let for en inline-funktion, da fejlsøgning udføres under kompilering. | Fejlfinding bliver vanskelig for makroer, da fejlkontroll ikke forekommer under kompilering. |
Binding | En inline-funktion binder alle udsagnene i funktionens krop meget godt, da funktionens krop begynder og slutter med de krøllede parenteser. | En makro står over for bindingsproblemet, hvis den har mere end en erklæring, da den ikke har et terminalsymbol. |
Definition af Inline
En inline-funktion ligner en almindelig funktion, men forud for søgeordet " inline ". Inline-funktioner er korte længdefunktioner, som udvides på tidspunktet for dens påkaldelse, i stedet for at blive kaldt. Lad os forstå inline-funktioner med et eksempel.
# include using namespace std; klasse eksempel {int a, b; offentligt: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <I ovennævnte program erklærede jeg og definerede funktionsinitialiseringen () som en inline-funktion i klassen "Eksempel". Koden for initialiseringen () -funktionen udvides, hvor den påberåbes af objektets klasse "eksempel". Funktionsdisplayet (), som er defineret i klasseproxet, er ikke angivet i linjen, men det kan betragtes som inline af kompilatoren som I C ++ bliver funktionen defineret inde i klassen automatisk lavet af kompilatoren i betragtning af længden af funktionen.
- Inline-funktionen reducerer overhead af funktionen, der ringer og vender tilbage, hvilket igen reducerer tidspunktet for udførelsen af programmet. Argumenterne skubbes også på stakken og registre gemmes, når en funktion kaldes og nulstilles, når funktionen vender tilbage, hvilket tager tid, undgås dette ved 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 data medlem.
- Inline-funktion reducerer tidspunktet for udførelsen af programmet, men i nogle tilfælde, hvis længden af inline-funktionen er større, vil størrelsen af programmet også stige på grund af den duplikerede kode. Det er derfor en god praksis at indlejre meget små funktioner.
- Inline-funktionens argument vurderes kun én gang.
Definition af makro
Makro er et "præprocessor-direktiv". Før kompilering undersøges programmet af præprocessoren, og hvor som helst den finder makroen i programmet, erstatter den den pågældende makro ved definitionen. Derfor betragtes makroen som "tekstudskiftning". Lad os studere makro med et eksempel.
#include #define større (a, b) ((a <b)? b: a) int main (void) {cout << "Større af 10 og 20 er" << GREATER ("20", "10") << "\ n"; returnere 0; }
I ovennævnte kode erklærede jeg en makrofunktion GREATER (), som sammenligner og finder det største antal af begge parametre. Du kan observere, at der ikke er nogen semikolon for at opsige makroen, da makroen kun opsiges af den nye linje. Som en makro er en bare en tekstudskiftning, vil den udvide makrokoden, hvor den påberåbes.
- Makroerne er altid defineret i store bogstaver bare for at gøre det nemt for programmørerne at identificere alle makroerne i programmet under læsning.
- Makroen kan aldrig være en klasses medlemsfunktion, og den kan heller ikke få adgang til data-medlemmerne i en klasse.
- Makrofunktionen evaluerer argumentet hver gang det vises i dens definition, hvilket resulterer i et uventet resultat.
- Makro skal have en mindre størrelse, da de større makroer unødigt vil øge kodenes størrelse.
Nøgleforskelle mellem inline og makro
- Den grundlæggende forskel mellem inline og makro er, at en inline-funktion analyseres af kompilatoren, mens makroerne i et program udvides af preprocessor.
- Søgeordet, der bruges til at definere en inline-funktion, er " inline ", mens søgeordet, der bruges til at definere en makro, er " #define ".
- Når inline-funktionen er decalre inde i en klasse, kan den defineres enten inde i en klasse eller uden for en klasse. På den anden side er en makro altid defineret i starten af programmet.
- Argumentet, der sendes til inline-funktionerne, evalueres kun én gang under kompilering, mens makro-argumentet evalueres hver gang en makro anvendes i koden.
- Kompilatoren må ikke indlejre og udvide alle funktioner defineret i en klasse. På den anden side udvides makroer altid.
- Den korte funktion, der er defineret inde i en klasse uden inline-søgeord, foretages automatisk inline-funktioner. På den anden side skal makro defineres specifikt.
- En funktion, der er inline, kan få adgang til klassens medlemmer, mens en makro aldrig kan få adgang til medlemmerne af klassen.
- For at afslutte en inline-funktion kræves en lukket krøllestang, mens en makro afsluttes med starten af en ny linje.
- Fejlfinding bliver let for inlne-funktionen, da den er tjekket under kompilering for en fejl. På den anden side er en makro ikke markeret under kompilering, så det bliver svært at fejle en makro.
- At være en funktion binder en inline-funktion sine medlemmer indenfor en start og lukket krøllestang. På den anden side har makro ikke noget terminationssymbol, så bindingen bliver vanskelig, når makro indeholder mere end de samme udsagn.
konklusioner:
Inline-funktionerne er langt mere overbevisende end makrofunktionen. C ++ giver også en bedre måde at definere en konstant, som bruger et "const" søgeord.