Låt oss studera skillnaden mellan inline och makro med hjälp av jämförelsetabellen.
Jämförelsediagram
Grunder för jämförelse | I kö | Makro |
---|---|---|
Grundläggande | Inline-funktioner analyseras av kompilatorn. | Makroer expanderas av förbehandlaren. |
Syntax | inline return_type funct_name (parametrar) {. . . } | #define macro_name char_sequence |
Nyckelord som används | i kö | #definiera |
Definierad | Det kan definieras inuti eller utanför klassen. | Den definieras alltid i början av programmet. |
Utvärdering | Det utvärderar argumentet endast en gång. | Det utvärderar argumentet varje gång det används i koden. |
Expansion | Kompilatorn får inte inline och expandera alla funktioner. | Makroer expanderas alltid. |
Automatisering | De korta funktionerna, definierade inuti klassen, görs automatiskt på inline-funktioner. | Makroner bör definieras specifikt. |
Åtkomst | En inline-medlemsfunktion kan komma åt klassens datamedlemmar. | Makroer kan aldrig vara medlemmar i klassen och kan inte komma åt klassens datamedlemmar. |
Uppsägning | Definitionen av inline-funktionen avslutas med de krökta parenteserna i slutet av inline-funktionen. | Definition av makro slutar med den nya linjen. |
felsökning | Felsökning är lätt för en inline-funktion eftersom felkontroll är klar under sammanställningen. | Felsökning blir svårt för makron eftersom felkontroll inte uppstår under sammanställningen. |
Bindning | En inline-funktion binder alla uttalanden i funktionens kropp väldigt bra, eftersom funktionens kropp börjar och slutar med de krökta hakarna. | Ett makro står inför bindningsproblemet om det har mer än ett uttalande, eftersom det inte har någon avslutningssymbol. |
Definition av Inline
En inline-funktion ser ut som en vanlig funktion men föregås av nyckelordet " inline ". Inline-funktioner är kortlängdsfunktioner som expanderas vid dess anrop, i stället för att ringas. Låt oss förstå inline-funktioner med ett exempel.
# include using namespace std; klassexempel {int a, b; allmän: inline void initiera (int x, int y) {a = x; b = y} void display () {cout << a << "" <I ovanstående program förklarade och definierade jag funktioninitialiseringen (), som en inline-funktion i klassen "Exempel". Koden för initialiseringen () -funktionen kommer att expandera där den är påkallad av objektet i klassen "exempel". Funktionsdisplayen (), definierad i klassexemplet, deklareras inte i linje men det kan anses vara inline av kompilatorn, som I C ++ görs den funktion som definieras inuti klassen automatiskt inline av kompilatorn med tanke på funktionens längd.
- Inline-funktionen minskar överkostnaden för funktionen som ringer och återvänder vilket i sin tur minskar tiden för programmets genomförande. Argumenten drivs också på stapeln och register sparas när en funktion kallas och återställs när funktionen återvänder, vilket tar tid, undviks detta av inline-funktionerna eftersom det inte finns något behov av att skapa lokala variabler och formella parametrar varje gång .
- Inline-funktioner kan vara medlem i klassen och kan även komma åt klassens dataledare.
- Inline-funktionen minskar tiden för exekvering av programmet, men ibland om längden på inline-funktionen är större kommer programmets storlek också att öka på grund av den dubbla koden. Det är därför en bra praxis att inline mycket små funktioner.
- Inline-funktionens argument utvärderas endast en gång.
Definition av makro
Makro är ett "förbehandlingsdirektiv". Innan kompilering undersöks, granskas programmet av förprocessorn och därhelst det hittas makro i programmet ersätter det det här makroet genom definitionen. Därför betraktas makrot som "textbytet". Låt oss studera makro med ett exempel.
#include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Större än 10 och 20 är" << GREATER ("20", "10") << "\ n"; returnera 0; }
I ovanstående kod förklarade jag en makrofunktion GREATER (), som jämför och hittar det större antalet båda parametrarna. Du kan observera att det inte finns någon semikolon att avsluta makroet eftersom makroen endast avslutas av den nya raden. Eftersom ett makro är en rättvis textbyte kommer den att expandera makrokoden där den är påkallad.
- Makronen definieras alltid i huvudbokstäverna för att göra det enkelt för programmerarna att identifiera alla makron i programmet medan de läses.
- Makroet kan aldrig vara en klassens medlemsfunktion, och det går inte heller att få tillgång till data medlemmar i någon klass.
- Makrofunktionen utvärderar argumentet varje gång det visas i dess definition vilket resulterar i ett oväntat resultat.
- Makro måste vara av mindre storlek eftersom de större makronen ökar kodens storlek onödigt.
Viktiga skillnader mellan inline och makro
- Den grundläggande skillnaden mellan inline och makro är att en inline-funktion analyseras av kompilatorn medan makron i ett program expanderas av preprocessor.
- Nyckelordet som används för att definiera en inline-funktion är " inline " medan sökordet som används för att definiera ett makro är " #define ".
- När inline-funktionen är decalre inuti en klass kan den definieras antingen inuti en klass eller utanför en klass. Å andra sidan definieras ett makro alltid i början av programmet.
- Argumentet som överförs till inline-funktionerna utvärderas endast en gång under sammansättningen medan makro-argumentet utvärderas varje gång ett makro används i koden.
- Kompilatorn får inte inline och expandera alla funktioner definierade i en klass. Å andra sidan expanderas makron alltid.
- Den korta funktionen som definieras inuti en klass utan inline-nyckelord görs automatiskt i inline-funktioner. Å andra sidan bör makro definieras specifikt.
- En funktion som är inline kan nå medlemmarna i klassen medan ett makro aldrig kan komma åt klassens medlemmar.
- För att avsluta en inline-funktion krävs en sluten krullning, medan ett makro avslutas med början av en ny linje.
- Felsökningen blir lätt för inlne-funktionen som den kontrolleras under sammanställningen för eventuella fel. Å andra sidan kontrolleras inte ett makro under sammansättning så det blir svårt att felsöka ett makro.
- Att vara en funktion binder en inline-funktion till sina medlemmar inom en start och sluten krullning. Å andra sidan har makro inte någon termineringssymbol, så bindning blir svårt när makro innehåller mer än ett uttalande.
Slutsatser:
Inline-funktionerna är mycket övertygande än makrofunktionen. C ++ ger också ett bättre sätt att definiera en konstant, som använder ett "const" -sökord.