c语言 - 声明"inline"递归的函数是否合法?



我正在考虑一些关于C编程语言的问题,并开始想知道inline如何与递归交互。我制作了这个测试程序来找出答案。

static inline void f(void) {
    f();
}
int main(void) {
    f();
    return 0;
}

我使用gcc编译程序,根本没有收到任何警告

$ c99 -Wall -pedantic main.c -o a

我的问题是

C 标准对混合inline与递归有什么看法?

对我来说,不应该允许它似乎是合乎逻辑的。

引用标准:(§6.7.4 函数说明符,第 6 段)

使用内联函数

说明符声明的函数是内联函数。使函数成为内联函数意味着对该函数的调用尽可能快。这些建议在多大程度上有效,由执行决定。

奇怪的是,该段落中没有提到内联函数;只是说调用应该很快。

编译器可以决定内联对函数的某些调用。例如,在递归内联函数中,编译器可以选择内联前k递归调用,对于一些较小的k值。(当然,无论如何它都可能决定这样做。不将函数声明为"内联"不会阻止编译器内联它。

相关内容

  • 没有找到相关文章

最新更新