内联递归函数

MOH*_*MED 2 c recursion inline

当gcc生成asm代码时,内联函数将被其代码替换.

使用内联递归函数时的行为是什么

inline int fact (int n)
{
    if (n<=1)
        return 1;
    else
        return (n * fact(n-1));
}
Run Code Online (Sandbox Code Playgroud)

我生成asm代码,gcc -S当递归函数带有inline前缀时,当递归函数没有inline前缀时,我发现两种情况的asm代码是相同的.

你对此有任何解释吗?

Alo*_*ave 6

请注意,这inline只是编译器可能接受或不接受的建议.它对编译器没有约束力以遵守您的建议.如果没有建议,智能编译器将内联函数.通常,对于递归函数,编译器将执行直到某些深度.

为什么编译器没有inline你的功能?

使用递归函数,编译器通常会寻找执行尾调用优化的机会.你的函数不是尾调用递归.