gpt4 book ai didi

c - 递归函数的内联

转载 作者:行者123 更新时间:2023-12-04 12:37:58 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com