Differenza tra Inline e Macro in C ++

Autore: Laura McKinney
Data Della Creazione: 2 Aprile 2021
Data Di Aggiornamento: 7 Maggio 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

Contenuto


La macro è un'istruzione che si espande al momento della sua invocazione. Le funzioni possono anche essere definite, come le macro. Allo stesso modo, anche le funzioni inline si espandono nel punto della sua invocazione. Una differenza principale tra la funzione inline e la macro è che funzioni incorporate vengono espansi durante compilazione, e il macro vengono espansi quando il programma viene elaborato dal preprocessore.

Studiamo la differenza tra inline e macro con l'aiuto del grafico di confronto.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontoIn lineamacro
Di base Le funzioni incorporate vengono analizzate dal compilatore.Le macro vengono espanse dal preprocessore.
Sintassiinline return_type funct_name (parametri) {. . . }#define nome_ macro char_sequence
Parole chiave utilizzatein linea
#definire
definitoPuò essere definito all'interno o all'esterno della classe.È sempre definito all'inizio del programma.
ValutazioneValuta l'argomento una sola volta.Valuta l'argomento ogni volta che viene utilizzato nel codice.
Espansione Il compilatore potrebbe non essere integrato ed espandere tutte le funzioni.Le macro sono sempre espanse.
AutomazioneLe funzioni brevi, definite all'interno della classe, vengono automaticamente trasformate in funzioni incorporate.Le macro dovrebbero essere definite in modo specifico.
AccessoUna funzione membro in linea può accedere ai membri dei dati della classe.Le macro non possono mai essere membri della classe e non possono accedere ai membri dei dati della classe.
fineLa definizione della funzione in linea termina con le parentesi graffe alla fine della funzione in linea.La definizione di macro termina con la nuova riga.
DebugIl debug è facile per una funzione incorporata poiché il controllo degli errori viene eseguito durante la compilazione.Il debug diventa difficile per le macro poiché il controllo degli errori non si verifica durante la compilazione.
RilegaturaUna funzione incorporata lega molto bene tutte le istruzioni nel corpo della funzione poiché il corpo della funzione inizia e termina con le parentesi graffe.Una macro deve affrontare il problema dell'associazione se ha più di un'istruzione, poiché non ha un simbolo di terminazione.


Definizione Inline

Una funzione in linea sembra una funzione normale ma è preceduta dalla parola chiave "in linea“. Le funzioni incorporate sono funzioni di breve durata che vengono espanse nel punto della sua invocazione, anziché essere chiamate. Comprendiamo le funzioni incorporate con un esempio.

#includere usando lo spazio dei nomi std; esempio di classe {int a, b; public: inline void initialize (int x, int y) {a = x; b = y} void display () {cout << a << "" <

Nel programma sopra, ho dichiarato e definito, la funzione initialize (), come una funzione incorporata nella classe "esempio". Il codice della funzione di inizializzazione () si espanderà dove viene invocato dall'oggetto della classe "esempio". La funzione display (), definita nell'esempio di classe non è dichiarata in linea ma può essere considerata in linea dal compilatore, come in C ++ le funzioni definite all'interno della classe vengono automaticamente rese in linea dal compilatore considerando la lunghezza della funzione.


  • La funzione inline riduce l'overhead della funzione call e return che a sua volta riduce il tempo di esecuzione del programma.Inoltre, gli argomenti vengono inseriti nello stack e i registri vengono salvati quando viene chiamata una funzione e reimpostati quando la funzione restituisce, il che richiede tempo, questo viene evitato dalle funzioni incorporate in quanto non è necessario creare ogni volta variabili locali e parametri formali .
  • Le funzioni incorporate possono essere un membro della classe e possono anche accedere al membro dei dati della classe.
  • La funzione Inline riduce il tempo di esecuzione del programma ma, a volte se la lunghezza della funzione Inline è maggiore, la dimensione del programma aumenta anche a causa del codice duplicato. Quindi, è una buona pratica incorporare funzioni molto piccole.
  • L'argomento della funzione inline viene valutato solo una volta.

Definizione di Macro

Macro è una "direttiva preprocessori". Prima della compilazione, il programma viene esaminato dal preprocessore e ovunque trova la macro nel programma, sostituisce quella macro con la sua definizione. Quindi, la macro è considerata la "sostituzione". Studiamo la macro con un esempio.

#includere #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Maggiore di 10 e 20 è" << MAGGIORE ("20", "10") << " n"; ritorna 0; }

Nel codice sopra, ho dichiarato una funzione macro GREATER (), che confronta e trova il maggior numero di entrambi i parametri. È possibile osservare che non esiste un punto e virgola per terminare la macro poiché la macro viene terminata solo dalla nuova riga. Poiché una macro è solo una sostituzione, espanderà il codice della macro dove viene invocata.

  • Le macro sono sempre definite in maiuscolo solo per facilitare ai programmatori l'identificazione di tutte le macro nel programma durante la lettura.
  • La macro non può mai essere la funzione membro di una classe, né può accedere ai membri dei dati di qualsiasi classe.
  • La funzione macro valuta l'argomento ogni volta che appare nella sua definizione che si traduce in un risultato imprevisto.
  • Le macro devono avere dimensioni inferiori poiché le macro più grandi aumentano inutilmente le dimensioni del codice.
  1. La differenza di base tra inline e macro è che le funzioni inline vengono analizzate dal compilatore, mentre le macro in un programma vengono espanse dal preprocessore.
  2. La parola chiave utilizzata per definire una funzione incorporata è "in linea"Mentre la parola chiave utilizzata per definire una macro è"#definire“.
  3. Una volta che la funzione inline viene decalizzata all'interno di una classe, può essere definita all'interno di una classe o all'esterno di una classe. D'altra parte, una macro è sempre definita all'inizio del programma.
  4. L'argomento passato alle funzioni inline viene valutato solo una volta durante la compilazione, mentre l'argomento macro viene valutato ogni volta che viene utilizzata una macro nel codice.
  5. Il compilatore potrebbe non incorporare ed espandere tutte le funzioni definite all'interno di una classe. D'altra parte, le macro sono sempre espanse.
  6. Le funzioni brevi definite all'interno di una classe senza parole chiave incorporate vengono automaticamente rese funzioni incorporate. D'altra parte, Macro dovrebbe essere definita in modo specifico.
  7. Una funzione in linea può accedere ai membri della classe mentre una macro non può mai accedere ai membri della classe.
  8. Per terminare una funzione inline è necessario un parentesi graffa chiusa mentre una macro viene terminata con l'inizio di una nuova linea.
  9. Il debug diventa facile per la funzione inlne poiché viene verificato durante la compilazione per eventuali errori. D'altra parte, una macro non viene controllata durante la compilazione, quindi il debug di una macro diventa difficile.
  10. Essendo una funzione, una funzione in linea lega i suoi membri all'interno di una parentesi graffa aperta e chiusa. D'altra parte, la macro non ha alcun simbolo di terminazione, quindi l'associazione diventa difficile quando la macro contiene più di una istruzione.

conclusioni:

Le funzioni in linea sono molto più convincenti della funzione macro. C ++ fornisce anche un modo migliore per definire una costante, che utilizza una parola chiave "const".