C中其他内联函数的内联函数

时间:2010-05-01 17:09:40

标签: c inline-functions

这段代码:

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

GCC,ARM(iPhone)

3 个答案:

答案 0 :(得分:2)

内联函数调用不是语言要求编译器执行的操作。这是一个实施质量问题(QoI)。但任何GCC,MSVC和clang都会这样做。当然,您必须启用优化。

例如

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}

答案 1 :(得分:0)

使用inline时无法保证。它只是作为编译器的一个提示(在许多(并非所有)案例中都有更多的启发式和更好地理解内联的影响而不是程序员)。

答案 2 :(得分:0)

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

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

将转变为此

int main()
{
    return 3 + 1;
}

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