è possibile utilizzare l'attributo always_inline
, ad esempio:
void foo() __attribute__((always_inline));
Dal docs
always_inline In generale, le funzioni non sono inline a meno che non sia specificato ottimizzazione. Per le funzioni dichiarate in linea, questo attributo incorpora la funzione anche se non è stato specificato alcun livello di ottimizzazione.
Note1: Non c'è alcuna necessità di utilizzare inline
se si utilizza l'attributo always_inline
Note2: Se la funzione non può essere inline si otterrà un messaggio di avviso, se per esempio la definizione non è disponibili durante la compilazione, tuttavia, ad un'ottimizzazione gcc più elevato può ancora inline nella chiamante, c'è un interruttore specifico anche per questo:
-funit-at-a-time
Dalla docs:
livelli di ottimizzazione -O2 e, soprattutto, in particolare, consentono unità-at-a-time mode, che permette al compilatore di prendere in considerazione le informazioni acquisite dalle funzioni più avanti nel file durante la compilazione di una funzione . Compilare più file contemporaneamente su un singolo file di output in in modalità unità alla volta consente al compilatore di utilizzare le informazioni acquisite da tutti i file durante la compilazione di ciascuno di essi.
Nota3: Non è necessario avere un prototipo esplicita in modo da poter utilizzare l'attributo sulla funzione defintion:
__attribute__((always_inline)) void foo() {
//some code
}
Vedi anche discussion, essa risponde ad alcune delle vostre domande.
funziona anche quando la definizione della funzione non è disponibile quando viene compilata una determinata unità? come fa il compilatore a gestire tale situazione .. – sgupta
@ user1075375 come può la definizione di una funzione non essere disponibile? deve essere lì altrimenti non compilerà/collegherà – iabdalkader
"Se un'implementazione di funzione non è nel file di intestazione e in un'unità di compilazione separata, non può essere in linea a meno che non si disponga di un compilatore che può eseguire LTCG" da http: // stackoverflow.com/questions/5187735/how-to-inline-string-h-function-on-linux?rq = 1 – sgupta