这段代码:
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)
答案 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只是编译器的提示。编译器可以忽略它。