1

将这段代码:

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);
}

转换成这样的代码?:

int main()
{
   return ((3) + 2) + 1;
}

海合会、ARM (iPhone)

4

3 回答 3

2

内联函数调用不是该语言需要编译器做的事情。这是一个实施质量问题 (QoI)。但是 GCC、MSVC 和 clang 中的任何一个都可以。当然,您必须启用优化。

例如

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}
于 2010-05-01T17:12:57.897 回答
0

使用时无法保证inline。它仅作为对编译器的提示(在许多(不是所有)情况下,编译器比程序员更能启发和更好地理解内联的影响)。

于 2010-05-01T17:12:44.540 回答
0

不必要。这取决于我猜的编译器和设置。事实上,例如在 C++ 中,它甚至不能保证这

inline int funcA(int a)
{
    return a + 1;
}
int main()
{
    return funcA(3);
}

会变成这个

int main()
{
    return 3 + 1;
}

inline 只是编译器的提示。编译器可以忽略它。

于 2010-05-01T17:14:42.460 回答