Funzioni inline in c ++

Funzioni inline in c ++
Quando una funzione normale viene chiamata in C ++, alcuni vengono ascoltati solo per chiamare la funzione. In realtà, chiamare una funzione richiede tempo prima che la funzione inizi davvero a eseguire. Questa volta tra quando viene chiamata la funzione e quando la funzione inizia davvero l'esecuzione è chiamata tempo di commutazione. Se la funzione normale è grande, il che significa che ci vorrà molto tempo per eseguire, il tempo di commutazione è relativamente piccolo e l'utente può ignorarla. Tuttavia, se la funzione normale è piccola, come molte funzioni sono, allora il tempo di commutazione, all'incirca lo stesso per le funzioni grandi e piccole, non dovrebbe essere ignorato. In molte situazioni, il tempo di commutazione è più lungo del tempo che la piccola funzione impiega per eseguire davvero; In alcuni casi, molto più a lungo.

Per risolvere questo problema, C ++ utilizza la macro e la funzione in linea. Una macro è come una piccola funzione, ma di solito è più corta di una piccola funzione tipica. La macro più lunga è ancora una "dichiarazione". Un corpo di funzione può avere più di un'affermazione. Una piccola funzione in linea ha vantaggi rispetto a una piccola funzione normale.

Quando viene definita una macro, viene chiamata più tardi nel programma. Una funzione in linea è anche definita e quindi chiamata più tardi nel programma. Una funzione normale viene definita e quindi chiamata più tardi nel programma. Tutti e tre questi tipi sono definiti e chiamati più tardi nel programma. Ognuno di essi può essere chiamato più di una volta.

Le funzioni in linea macro e piccole sono diverse dalla normale funzione di approccio quando sono successivamente in basso nel programma. Il compilatore C ++ colloca il codice macro definito o il codice funzione inline (corpo) definito in qualsiasi luogo viene chiamato nel programma. Quando il compilatore lo fa, si dice che il compilatore abbia ampliato la funzione macro o in linea. Questo non è il caso di una funzione normale. La funzione normale non viene ampliata, dove viene chiamata.

Mentre la chiamata di una funzione normale necessita di tempo di commutazione, affinché la funzione sia adeguatamente asserita prima della sua esecuzione, la funzione macro o piccola in linea inizia l'esecuzione ogni volta che viene chiamata e non vi è alcun tempo di commutazione. Questo è il vantaggio principale che la macro e la piccola funzione in linea hanno sulla funzione normale, i.e., Il tempo di cambio viene omesso.

Questo articolo spiega le funzioni in linea in C ++ rispetto alle macro. Viene data una spiegazione della macro. Un confronto della funzione in linea e la normale funzione viene svolto verso la fine dell'articolo.

Nota: si dice che chiamare una macro in un programma invocano la macro.

Contenuto dell'articolo

  • Introduzione - Vedi sopra
  • Definizione di macro e funzioni in linea
  • funzione inline e il compilatore
  • Confrontare le macro e le funzioni in linea
  • Confrontare le funzioni in linea e normali
  • Conclusione

Definizione di macro e funzioni in linea

Macro e variabile in linea come oggetti
C'è una macro simile a oggetti e c'è una macro simile a una funzione. Di conseguenza, ci sono variabili in linea e funzioni in linea. Considera il seguente programma C ++:

#includere
Utilizzo dello spazio dei nomi std;
#define var1 "e"
inline char var2 = 'e';
int main ()

cout << var1 << endl;
cout << var2 << endl;
restituzione 0;

L'output è:

E
E

Questo programma ha una macro simile a oggetti e una variabile in linea. Ognuno contiene il valore, 'e'. Una macro simile a oggetti inizia con #define e non ha indicatore di tipo. Una variabile inline inizia con "in linea" e un indicatore di tipo lo segue. Le macro hanno uno svantaggio rispetto ai tipi in linea perché non indicano il tipo. Ciò può portare a problemi di mancata corrispondenza nel programma. Nella funzione principale (), VAR1 e VAR2 sono rispettivamente il codice di definizione delle diverse variabili.

Nota: non è chiaro se VAR1 contiene un carbone o una stringa letterale. Inoltre, si noti che una macro, simile a oggetti o alla funzione, non finisce con un punto e virgola. Termina premendo il tasto Invio. Una funzione variabile in linea o in linea termina nel rispettivo modo normale.

Funzione macro e in linea
Una macro simile a una funzione è una macro che prende argomenti. Come la macro simile a oggetti, ovunque la macro simile a una funzione sia invocata nel programma, il compilatore sostituisce l'invocazione con la definizione del codice ed elimina il tempo di commutazione (sovraccarico di chiamate di funzione) in fase di esecuzione.

Una funzione in linea è una funzione che inizia con "in linea". Ha un vantaggio rispetto alla macro simile a una funzione con il suo tipo di ritorno e i tipi di argomentazioni. Una macro simile a una funzione non ha tipi di argomenti o tipi di restituzione. Il suo tipo di ritorno è il valore finale del nome macro.

Il seguente programma C ++ ha una macro simile a una funzione e una funzione in linea, ognuna delle quali cerca il valore massimo di due argomenti. La funzione inline confronta due numeri interi e restituisce l'intero più grande. Il valore di ritorno della funzione inline può essere assegnato a una nuova variabile int. D'altra parte, il valore finale della macro diventa il valore della macro.

#includere
Utilizzo dello spazio dei nomi std;
#define maxm (a, b) ((a)> (b) ? (a): (b))
inline int maxi (int a, int b)
if (a> b)
restituire a;
se un < b)
ritorno b;
if (a == b)
restituire a;

int main ()

cout << maxM(2.5, 6) << endl;
cout << maxI(3, 7) << endl;
restituzione 0;

L'output è:

6
7

Con la macro, gli argomenti dovrebbero essere di tipi compatibili. Questo dà alla macro una sorta di vantaggio rispetto alla funzione in linea, i cui tipi di argomentazioni dovrebbero essere gli stessi, in questo caso.

Il nome della macro è maxm. Gli argomenti sono A e B. Il resto è una specie di corpo di funzione, delimitato dalle parentesi. Dice se (a)> (b) è vero, allora diventa il valore della macro; Altrimenti, B diventa il valore della macro.

funzione inline e il compilatore

Dopo che il compilatore sostituisce la chiamata della funzione inline con il codice di definizione della funzione, il programma deve comunque eseguire. La compilazione non è in esecuzione o esegue il programma. Con la funzione normale, il sovraccarico (tempo di commutazione) si verifica quando viene eseguito il programma (eseguito). La sostituzione macro o in linea si verifica durante la compilazione, che è prima dell'esecuzione (prima che il programma venga inviato al cliente o all'utente).

Alla fine, il tempo di commutazione viene omesso o guadagnato per macro e piccole funzioni in linea. Tuttavia, se la funzione in linea è grande, il compilatore deciderà se rendere la funzione dichiarata in linea, in linea o no. Se la funzione dichiarata in linea è grande, potrebbe esserci alcun guadagno significativo nella sostituzione di una delle sue chiamate con il corpo del suo codice funzione. Per quanto riguarda i criteri della decisione del compilatore, - vedi più tardi.

Nota: una funzione definita all'interno di una definizione di classe è una funzione inline preceduta dallo specificatore in linea.

Confrontare le macro e le funzioni in linea

La macro può funzionare con diversi tipi purché siano compatibili. Questo è un vantaggio. Tuttavia, ciò porta anche a effetti collaterali, il che gli dà uno svantaggio. La funzione inline testerà la validità dei suoi tipi di argomentazioni prima di usare gli argomenti, il che impedisce gli effetti collaterali.

Confrontare le funzioni in linea e normali

Vantaggi della funzione in linea

  • Non esiste un sovraccarico di chiamate di funzione (nessun tempo di commutazione).
  • C'è anche un sovraccarico quando una funzione normale ritorna. Con la funzione in linea, non esiste un sovraccarico di chiamata di ritorno.
  • Esiste una possibile ottimizzazione specifica del contesto del corpo funzione con la funzione in linea.

Svantaggi della funzione in linea

  • Per ogni chiamata della funzione inline, il codice Definizione della funzione (Body) viene ripetuto (è stato recitato dal compilatore). Questo può portare a un file molto grande e binario (compilato).
  • Il compilatore impiega molto a compilare, in quanto ripete lo stesso codice per tutte le chiamate.

Le funzioni in linea potrebbero non essere necessarie per molti sistemi incorporati perché una dimensione del programma inferiore è preferibile a una velocità più elevata.

Ci sono altri svantaggi: vedi più tardi.

Conclusione

La funzione inline è come una macro. Servono allo stesso scopo. Il codice di definizione sostituisce ogni chiamata di invocazione o funzione. Tuttavia, una funzione in linea ha maggiori vantaggi rispetto alla macro. C'è la macro simile a oggetti e c'è di conseguenza la variabile in linea. Esiste la macro simile a una funzione e c'è di conseguenza la funzione in linea. Una funzione definita all'interno di una definizione di classe è una funzione inline.

Per definire una macro simile a oggetti o una macro simile a una funzione, lo precede con #define seguito dal nome macro. La macro non specifica il suo tipo di valore o i tipi di argomentazioni. Per definire una variabile inline o una funzione in linea, precederla con lo specificatore, in linea, seguito dal tipo di ritorno, quindi dal nome. Per la funzione inline, sia il tipo di ritorno che i tipi di argomento sono precisi. Vengono prevenuti gli effetti collaterali.

La funzione in linea ha vantaggi complessivi rispetto alla macro. Ci sono pro e contro quando la funzione inline viene confrontata con la funzione normale.