Comprendo l'inlining come segue:
Una funzione separata contrassegnata come "inline" (supponendo che il compilatore faccia realmente inline) sarà "unita" alla funzione che viene chiamata.
vale a dire. (pseudo codice)
void main ()
{
printf(b(2,3)) // will be printf(2*3*3);
}
inline function b(int x, int y)
{
return x*y*y;
}
Tuttavia, ho avuto una discussione riguardante l'inlining e perché sono avvisato di non eseguire funzioni inline chiamate esattamente una volta nel mio codice (perché sono funzioni di inizializzazione)?
Ad esempio:
void main(){
initFunctionA();
SomeType destinationA;
SomeType destinationB;
InitDescriptionType description;
//initialize DescriptionType
initFunctionB(&description, destinationA&);
initFunctionC(&description, destinationB&);
}
inline void initFunctionA()
{
//do stuff
}
inline void initFunctionB(InitDescriptionType* desc, SomeType** destination)
{
// Take Description and put something into destination
}
inline void initFunction(InitDescriptionType* desc, SomeType** destination)
{
// Take Description and put something into destination
}
Non significherebbe che il mio codice di uscita è leggermente più piccolo (dato che non ci sono salti alle funzioni ecc.?)
€ dit: la domanda collegata non risponde alla mia domanda specifica. Nel mio caso, l'inizializzazione è una singola funzione. Il mio pensiero era "Ehi, perché non separo la mia inizializzazione in più funzioni più piccole per renderle leggibili e renderle in linea?"