在 gcc 生成 asm 代码的阶段,内联函数被其代码替换。
对递归函数使用内联时会有什么行为
inline int fact (int n)
{
if (n<=1)
return 1;
else
return (n * fact(n-1));
}
当递归函数带有 inline
前缀并且递归函数没有 inline
时,我使用 gcc -S
生成 asm 代码前缀,我发现这两种情况的 asm 代码是相同的。
你对此有什么解释吗?
最佳答案
请注意,inline
只是对编译器的建议,编译器可能接受也可能不接受。遵守您的建议对编译器没有约束力。即使没有建议,智能编译器也会内联一个函数。通常,对于递归函数,编译器会执行到一定深度。
Why the compiler does not
inline
your function?
对于递归函数,编译器通常会寻找机会执行 tail call optimization 。您的函数不是尾调用递归的。
关于c - 递归函数的内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441718/