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)

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top