fonction en ligne dans une autre fonction en ligne en C
-
02-10-2019 - |
Question
Est-ce que ce code:
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);
}
transformé en code comme ceci:
int main()
{
return ((3) + 2) + 1;
}
GCC, ARM (iPhone)
La solution
Inlining appels de fonction ne sont pas quelque chose de la langue exige compilateurs à faire. Il est une question de qualité de mise en œuvre (QoI). Mais l'un des GCC, MSVC et clang fera. Bien sûr, vous devez activer l'optimisation.
Par exemple
# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
ret i32 6
}
Autres conseils
Il n'y a aucune garantie lors de l'utilisation inline
. Il sert simplement comme une indication pour le compilateur (qui, dans beaucoup (pas tous) ont plus heuristiques et une meilleure compréhension de l'impact de inline que le programmeur).
Pas nécessairement. Il dépend du compilateur de paramètres et je suppose. En fait, en C ++ par exemple, il est même pas garanti que ce
inline int funcA(int a)
{
return a + 1;
}
int main()
{
return funcA(3);
}
va se transformer en cette
int main()
{
return 3 + 1;
}
en ligne est juste l'indice pour le compilateur. Le compilateur peut l'ignorer.