2010-05-01 106 views
1

请问这个代码:内联函数在其他内联函数用C

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)

回答

2

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

例如

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

我喜欢它实际上内联,然后做了另一个通过,并评估常量......做得很好。 – 2013-04-16 23:43:20

0

有没有保证当使用inline。它仅仅作为编译器的暗示(在许多(并非全部)案例中,与程序员相比,它们具有更多的启发式和更好地理解内联的影响)。

0

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

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

将得到改造成这个

int main() 
{ 
    return 3 + 1; 
} 

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

+1

但是你可以强制编译器(GCC)去做:inline void foo(void)__attribute __((always_inline)); – tur1ng 2010-05-01 17:17:53