funzione inline in altra funzione inline in C
-
02-10-2019 - |
Domanda
Sarà questo codice:
inline int funcA(int a) __attribute__((always_inline))
{
return a + 1;
}
inline int funcB(int b) __attribute__((always_inline))
{
return funcA(b + 2);
}
int main()
{
return funcB(3);
}
trasformato in codice come questo:?
int main()
{
return ((3) + 2) + 1;
}
GCC, ARM (iPhone)
Soluzione
Inlining chiamate di funzione non è qualcosa che il linguaggio richiede compilatori di fare. Si tratta di una qualità di problema di implementazione (QoI). Ma qualsiasi di GCC, MSVC e clang lo farà. Naturalmente, è necessario abilitare l'ottimizzazione.
Per esempio
# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
ret i32 6
}
Altri suggerimenti
Non ci sono garanzie quando si utilizza inline
. Serve solo come un suggerimento per il compilatore (che in molti (non tutti) i casi hanno più euristica e una migliore comprensione dell'impatto delle inlining del programmatore).
Non necessariamente. Dipende del sul compilatore e le impostazioni immagino. Infatti in C ++, ad esempio non è nemmeno garantito che questo
inline int funcA(int a)
{
return a + 1;
}
int main()
{
return funcA(3);
}
andranno trasformato in questo
int main()
{
return 3 + 1;
}
linea è solo il suggerimento per il compilatore. Il compilatore può ignorarlo.