Raccomandato, 2024

Scelta Del Redattore

Differenza tra Inline e Macro in C ++

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

Studiamo la differenza tra inline e macro con l'aiuto della tabella di confronto.

Grafico comparativo

Base per il confrontoIn lineamacro
Di baseLe funzioni inline sono analizzate dal compilatore.Le macro sono espanse dal preprocessore.
Sintassiin linea return_type funct_name (parametri) {. . . }#define nome_carta 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 solo una volta.Valuta l'argomento ogni volta che viene utilizzato nel codice.
EspansioneIl compilatore potrebbe non inline ed espandere tutte le funzioni.Le macro sono sempre espanse.
AutomazioneLe funzioni brevi, definite all'interno della classe, vengono automaticamente trasformate in funzioni inline.Le macro dovrebbero essere definite in modo specifico.
AccessoUna funzione membro inline può accedere ai membri dati della classe.Le macro non possono mai essere membri della classe e non possono accedere ai membri dati della classe.
fineLa definizione della funzione inline termina con le parentesi graffe alla fine della funzione inline.La definizione della macro termina con la nuova riga.
DebugIl debugging è facile per una funzione inline poiché la verifica degli errori viene eseguita durante la compilazione.Il debug diventa difficile per le macro poiché la verifica degli errori non si verifica durante la compilazione.
RilegaturaUna funzione inline lega molto bene tutte le istruzioni nel corpo della funzione mentre il corpo della funzione inizia e termina con le parentesi graffe.Una macro affronta il problema del binding se ha più di un'istruzione, in quanto non ha un simbolo di terminazione.

Definizione di Inline

Una funzione inline sembra una funzione regolare ma, è preceduta dalla parola chiave " inline ". Le funzioni inline sono funzioni di breve durata che vengono espanse al momento della sua chiamata, invece di essere chiamate. Comprendiamo le funzioni inline con un esempio.

 # include using namespace 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 initialization (), come funzione inline nella classe "example". Il codice della funzione initialization () si espande dove viene invocato dall'oggetto della classe "example". La funzione display (), definita nell'esempio di classe non è dichiarata inline ma può essere considerata inline dal compilatore, come in C ++ la funzione definita all'interno della classe viene automaticamente resa in linea dal compilatore considerando la lunghezza della funzione.

  • La funzione inline riduce il sovraccarico delle chiamate e delle chiamate di funzioni che a loro volta riducono il tempo di esecuzione del programma. Inoltre, gli argomenti vengono inseriti nello stack e i registri vengono salvati quando viene chiamata una funzione e ripristinati quando la funzione restituisce, il che richiede tempo, ciò viene evitato dalle funzioni inline in quanto non è necessario creare variabili locali e parametri formali ogni volta .
  • Le funzioni inline possono essere membri della classe e possono anche accedere ai membri dati della classe.
  • La funzione Inline riduce il tempo di esecuzione del programma ma, a volte se la lunghezza della funzione inline è maggiore, anche la dimensione del programma aumenterà a causa del codice duplicato. Quindi, è una buona pratica integrare funzioni molto piccole.
  • L'argomento della funzione inline viene valutato solo una volta.

Definizione di Macro

La macro è una "direttiva sui preprocessori". Prima della compilazione, il programma viene esaminato dal preprocessore e ogni volta che trova la macro nel programma, sostituisce quella macro con la sua definizione. Quindi, la macro è considerata come "sostituzione del testo". Cerchiamo di studiare macro con un esempio.

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

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

  • Le macro sono sempre definite in lettere maiuscole solo per facilitare ai programmatori l'identificazione di tutte le macro del programma durante la lettura.
  • La macro non può mai essere una funzione membro di una classe, né può accedere ai membri dati di qualsiasi classe.
  • La funzione macro valuta l'argomento ogni volta che appare nella sua definizione, il che si traduce in un risultato imprevisto.
  • La macro deve essere di dimensioni inferiori poiché le macro più grandi aumenteranno inutilmente la dimensione del codice.

Differenze chiave tra Inline e Macro

  1. La differenza fondamentale 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 inline è " inline " mentre, la parola chiave utilizzata per definire una macro è " #define ".
  3. Una volta che la funzione inline è decalre 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 una macro viene utilizzata nel codice.
  5. Il compilatore non può inline ed espandere tutte le funzioni definite all'interno di una classe. D'altra parte, le macro sono sempre espanse.
  6. Le funzioni corte che sono definite all'interno di una classe senza parola chiave inline vengono automaticamente rese funzioni inline. D'altra parte, la Macro dovrebbe essere definita in modo specifico.
  7. Una funzione che è 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 è richiesta una parentesi graffa chiusa, mentre una macro termina con l'inizio di una nuova riga.
  9. Il debug diventa facile per la funzione inlne poiché viene controllato durante la compilazione per qualsiasi errore. 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 inline lega i suoi membri all'interno di parentesi graffe iniziali e chiuse. D'altra parte, la macro non ha alcun simbolo di terminazione, quindi l'associazione diventa difficile quando la macro contiene più di una affermazione.

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".

Top