Skillnaden mellan inline och makro i C ++

Författare: Laura McKinney
Skapelsedatum: 2 April 2021
Uppdatera Datum: 11 Maj 2024
Anonim
What is the difference between macro and function
Video: What is the difference between macro and function

Innehåll


Makro är en instruktion som expanderar vid tidpunkten för invigningen. Funktioner kan också definieras, som makron. På liknande sätt expanderar inlinefunktionerna också vid den tidpunkt då den kallas. En primär skillnad mellan inline- och makrofunktion är att inline-funktioner utvidgas under kompilering, och den makron utvidgas när programmet bearbetas av förprocessorn.

Låt oss studera skillnaden mellan inline och makro med hjälp av jämförelsediagram.

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Slutsats

Jämförelsediagram

Grund för jämförelseI köMakro
Grundläggande Inline-funktioner analyseras av kompilatorn.Makron utvidgas av förprocessorn.
Syntaxinline return_type funct_name (parametrar) {. . . }#definiera makronamn char_sequence
Använda nyckelordi kö
#definiera
DefinieratDet kan definieras inom eller utanför klassen.Det definieras alltid i början av programmet.
UtvärderingDen utvärderar argumentet endast en gång.Den utvärderar argumentet varje gång det används i koden.
Expansion Kompilatorn kanske inte inline och utvidgar alla funktioner.Makron utvidgas alltid.
AutomatiseringDe korta funktionerna, definierade i klassen, görs automatiskt på inline-funktioner.Makron bör definieras specifikt.
ÅtkomstEn inline-medlemfunktion kan komma åt klassmedlemmarnas medlemmar.Makron kan aldrig vara medlemmar i klassen och kan inte komma åt klassmedlemmarna.
UppsägningDefinition av inline-funktion avslutas med de lockiga parenteserna i slutet av inline-funktionen.Definition av makro avslutas med den nya raden.
felsökningFelsökning är lätt för en inline-funktion eftersom felkontroll görs under sammanställningen.Felsökning blir svårt för makron eftersom felkontroll inte sker under sammanställningen.
BindningEn inline-funktion binder alla påståenden i kroppens funktion mycket väl som funktionen av kroppen startar och slutar med de lockiga parenteserna.Ett makro står inför bindningsproblemet om det har mer än ett uttalande, eftersom det inte har någon avslutande symbol.


Definition av inline

En inline-funktion ser ut som en vanlig funktion men föregås av nyckelordet "i kö”. Inlinefunktioner är korta längdfunktioner som utvidgas vid tidpunkten för dess kallelse istället för att kallas. Låt oss förstå inline-funktioner med ett exempel.

#inkludera med namnutrymme std; klassexempel {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <

I ovanstående program förklarade och definierade jag, funktionen initialiseras (), som en inline-funktion i klassen "exempel". Koden för initieringsfunktionen () kommer att utvidgas där den åberopas av objektet för klassen "exempel". Funktionsdisplayen (), definierad i klassexemplet förklaras inte inline men den kan betraktas som inline av kompilatorn, som i C ++ görs funktionen som definieras i klassen automatiskt inline av kompilatorn med tanke på funktionens längd.


  • Inline-funktionen reducerar omkostnaderna för funktionssamtal och återgång, vilket i sin tur minskar tiden för programmets körning.Argumenten skjuts också på bunten och register sparas när en funktion anropas och återställs när funktionen återgår, vilket tar tid, detta undviks av inline-funktionerna eftersom det inte finns något behov av att skapa lokala variabler och formella parametrar varje gång .
  • Inlinefunktioner kan vara medlemmar i klassen och kan också komma åt klassmedlemmarnas data.
  • Inline-funktion reducerar programmets körningstid, men ibland om längden på inline-funktionen är större då kommer programmets storlek också att öka på grund av den duplicerade koden. Därför är det bra att inrätta mycket små funktioner.
  • Inlinefunktionens argument utvärderas endast en gång.

Definition av makro

Makro är ett ”förbehandlingsdirektiv”. Innan kompilering undersöks programmet av förprocessorn och när det hittas makro i programmet ersätter det makro med sin definition. Därför betraktas makroen som ”ersättningen”. Låt oss studera makro med ett exempel.

#inkludera #definiera STORA (a, b) ((a <b)? b: a) int main (void) {cout << "Större av 10 och 20 är" << GREATER ("20", "10") << " n"; retur 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 för att avsluta makroen eftersom makro endast avslutas av den nya raden. Eftersom ett makro bara är en ersättning, kommer den att utöka makrokoden där den åberopas.

  • Makroerna definieras alltid med stora bokstäver bara för att göra det enkelt för programmerarna att identifiera alla makron i programmet under läsning.
  • Makroen kan aldrig vara en klassens medlemsfunktion, och den får inte heller komma åt datormedlemmarna i någon klass.
  • Makrofunktionen utvärderar argumentet varje gång det visas i sin definition som resulterar i ett oväntat resultat.
  • Makro måste vara av mindre storlek eftersom de större makronen onödigt ökar storleken på koden.
  1. Den grundläggande skillnaden mellan inline och makro är att en inline-funktioner analyseras av kompilatorn medan makroerna i ett program expanderas av förprocessorn.
  2. Nyckelordet som används för att definiera en inline-funktion är "i kö"Medan nyckelordet som används för att definiera ett makro är"#definiera“.
  3. När inline-funktionen har dekalerats i en klass kan den definieras antingen i en klass eller utanför en klass. Å andra sidan definieras alltid ett makro i början av programmet.
  4. Argumentet som skickas till inlinefunktionerna utvärderas endast en gång under sammanställningen, medan makrosargumentet utvärderas varje gång ett makro används i koden.
  5. Kompilatorn kanske inte inline och utvidgar alla funktioner definierade i en klass. Å andra sidan utökas makron alltid.
  6. Den korta funktionen som definieras i en klass utan inline nyckelord görs automatiskt inline-funktioner. Å andra sidan bör makro definieras specifikt.
  7. En funktion som är inline kan komma åt klassens medlemmar medan ett makro aldrig kan komma åt klassens medlemmar.
  8. För att avsluta en inline-funktion krävs en stängd lockig stag medan ett makro avslutas med början av en ny linje.
  9. Felsökning blir lätt för inlne-funktionen eftersom det kontrolleras under kompilering för eventuella fel. Å andra sidan kontrolleras inte ett makro vid sammanställning, så att felsöka ett makro blir svårt.
  10. Att vara en funktion, en inline-funktion binder sina medlemmar inom en start och stängda lockiga hängslen. Å andra sidan har inte makro någon avslutande symbol, så bindning blir svår när makro innehåller mer än ett uttalande.

Slutsatser:

Inlinefunktionerna är mycket mer övertygande än makrofunktion. C ++ ger också ett bättre sätt att definiera en konstant, som använder ett "const" -sökord.