Verschil tussen inline en macro in C ++

Schrijver: Laura McKinney
Datum Van Creatie: 2 April 2021
Updatedatum: 14 Kunnen 2024
Anonim
Topic 10: (Part 3)-inline function|inline function Vs macro|cpp programming
Video: Topic 10: (Part 3)-inline function|inline function Vs macro|cpp programming

Inhoud


Macro is een instructie die wordt uitgebreid op het moment van aanroep. Functies kunnen ook worden gedefinieerd, zoals macro's. Evenzo breiden de inline-functies zich ook uit op het moment van aanroep. Een belangrijk verschil tussen de inline- en macrofunctie is dat de inline functies worden uitgebreid tijdens compilatie, en de macros worden uitgebreid wanneer het programma wordt verwerkt door de preprocessor.

Laten we het verschil tussen inline en macro bestuderen met behulp van een vergelijkingstabel.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingIn lijnmacro
basis- Inline-functies worden geparseerd door de compiler.Macro's worden uitgebreid door de preprocessor.
Syntaxisinline return_type funct_name (parameters) {. . . }#define macro_naam char_sequence
Gebruikte zoekwoordenin lijn
#bepalen
GedefinieerdHet kan binnen of buiten de klas worden gedefinieerd.Het wordt altijd gedefinieerd aan het begin van het programma.
evaluatieHet evalueert het argument slechts eenmaal.Het evalueert het argument telkens wanneer het in de code wordt gebruikt.
Uitbreiding De compiler is mogelijk niet inline en breidt alle functies uit.Macro's worden altijd uitgebreid.
AutomatiseringDe korte functies, gedefinieerd binnen de klasse, worden automatisch gemaakt in inline functies.Macro's moeten specifiek worden gedefinieerd.
ToegangEen inline-ledenfunctie heeft toegang tot de gegevensleden van de klasse.Macro's kunnen nooit lid zijn van de klas en hebben geen toegang tot de gegevensleden van de klas.
BeëindigingDe definitie van de inline-functie eindigt met de accolades aan het einde van de inline-functie.Definitie van macro eindigt met de nieuwe regel.
DebuggingFoutopsporing is eenvoudig voor een inline-functie omdat foutcontrole wordt uitgevoerd tijdens het compileren.Foutopsporing wordt moeilijk voor macro's omdat foutcontrole niet optreedt tijdens het compileren.
VerbindendEen inline-functie bindt alle uitspraken in het lichaam van de functie zeer goed, aangezien het lichaam van de functie begint en eindigt met de accolades.Een macro wordt geconfronteerd met het bindingsprobleem als deze meer dan één instructie bevat, omdat deze geen beëindigingssymbool heeft.


Definitie van Inline

Een inline-functie ziet eruit als een normale functie, maar wordt voorafgegaan door het trefwoord 'in lijn“. Inline-functies zijn functies van korte duur die worden uitgebreid op het punt van aanroep, in plaats van te worden aangeroepen. Laten we inline-functies begrijpen met een voorbeeld.

#include namespace std; gebruiken; klassevoorbeeld {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} ongeldige weergave () {cout << a << "" <

In het bovenstaande programma, heb ik de functie initialiseren (), als een inline-functie in de klasse "voorbeeld", aangegeven en gedefinieerd. De code van de initialisatie () functie wordt uitgebreid waar deze wordt aangeroepen door het object van de klasse "example". De functie display (), gedefinieerd in het klassenvoorbeeld, wordt niet inline verklaard maar kan door de compiler als inline worden beschouwd, zoals in C ++ wordt de functie die binnen de klasse is gedefinieerd automatisch inline gemaakt door de compiler, rekening houdend met de lengte van de functie.


  • De inline-functie vermindert de overhead van het aanroepen en terugzenden van functies, wat op zijn beurt de uitvoeringstijd van het programma verkort.Ook worden de argumenten naar de stapel gepusht en worden registers opgeslagen wanneer een functie wordt aangeroepen en gereset wanneer de functie terugkeert, wat tijd kost, dit wordt vermeden door de inline-functies omdat het niet nodig is om telkens lokale variabelen en formele parameters te maken .
  • Inline-functies kunnen lid zijn van de klasse en hebben ook toegang tot het gegevenslid van de klasse.
  • Inline-functie verkort de uitvoeringstijd van het programma, maar soms als de lengte van de inline-functie groter is, zal de omvang van het programma ook toenemen vanwege de gedupliceerde code. Daarom is het een goede gewoonte om zeer kleine functies te onderstrepen.
  • Het argument van de inline-functie wordt slechts eenmaal geëvalueerd.

Definitie van Macro

Macro is een "preprocessors-richtlijn". Voorafgaand aan compilatie wordt het programma onderzocht door de preprocessor en waar het de macro in het programma vindt, vervangt het die macro door zijn definitie. Daarom wordt de macro beschouwd als de "vervanging". Laten we macro bestuderen met een voorbeeld.

#include #define GROTER (a, b) ((a <b)? b: a) int main (nietig) {cout << "Groter van 10 en 20 is" << GROTER ("20", "10") << " n"; terugkeer 0; }

In de bovenstaande code verklaarde ik een macrofunctie GROTER (), die het grootste aantal van beide parameters vergelijkt en vindt. U kunt zien dat er geen puntkomma is om de macro te beëindigen, omdat de macro alleen wordt beëindigd door de nieuwe regel. Aangezien een macro slechts een vervanging is, wordt de macrocode uitgebreid waar deze wordt aangeroepen.

  • De macro's worden altijd in hoofdletters gedefinieerd om het voor de programmeurs gemakkelijk te maken om alle macro's in het programma tijdens het lezen te identificeren.
  • De macro kan nooit de ledenfunctie van een klasse zijn, noch toegang krijgen tot de gegevensleden van een klasse.
  • De macrofunctie evalueert het argument elke keer dat het in de definitie verschijnt, wat resulteert in een onverwacht resultaat.
  • Macro moet kleiner zijn, omdat de grotere macro's de code onnodig vergroten.
  1. Het fundamentele verschil tussen inline en macro is dat een inline-functie door de compiler wordt ontleed, terwijl de macro's in een programma door de preprocessor worden uitgebreid.
  2. Het trefwoord dat wordt gebruikt om een ​​inline-functie te definiëren, is 'in lijn"Terwijl het sleutelwoord dat wordt gebruikt om een ​​macro te definiëren"#bepalen“.
  3. Als de inline-functie binnen een klasse decalre is, kan deze binnen een klasse of buiten een klasse worden gedefinieerd. Aan de andere kant wordt een macro altijd gedefinieerd aan het begin van het programma.
  4. Het argument dat wordt doorgegeven aan de inline-functies, wordt slechts één keer geëvalueerd tijdens het compileren, terwijl het macro-argument wordt geëvalueerd telkens wanneer een macro in de code wordt gebruikt.
  5. De compiler is mogelijk niet inline en breidt niet alle functies uit die binnen een klasse zijn gedefinieerd. Aan de andere kant worden macro's altijd uitgebreid.
  6. De korte functie die binnen een klasse zonder inline-trefwoord wordt gedefinieerd, wordt automatisch inline-functies gemaakt. Aan de andere kant moet Macro specifiek worden gedefinieerd.
  7. Een functie die inline is, heeft toegang tot de leden van de klasse, terwijl een macro nooit toegang heeft tot de leden van de klasse.
  8. Om een ​​inline-functie te beëindigen, is een gesloten accolade vereist, terwijl een macro wordt beëindigd met het begin van een nieuwe regel.
  9. Foutopsporing wordt eenvoudig voor de inlne-functie omdat deze tijdens het compileren wordt gecontroleerd op fouten. Aan de andere kant wordt een macro niet gecontroleerd tijdens het compileren, dus het debuggen van een macro wordt moeilijk.
  10. Omdat het een functie is, verbindt een inline-functie zijn leden binnen een start en gesloten accolades. Aan de andere kant heeft macro geen terminatiesymbool, dus binden wordt moeilijk wanneer macro meer dan één beweringen bevat.

conclusies:

De inline-functies zijn veel overtuigender dan de macrofunctie. C ++ biedt ook een betere manier om een ​​constante te definiëren, die een trefwoord "const" gebruikt.