声明"内联"的函数是递归的是合法的吗?

wef*_*fa3 -2 c recursion inline segmentation-fault language-lawyer

我正在考虑一下C编程语言,并开始想知道如何inline与递归交互.我做了这个测试程序来找出答案.

static inline void f(void) {
    f();
}

int main(void) {
    f();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用编译程序gcc并且根本没有警告

$ c99 -Wall -pedantic main.c -o a
Run Code Online (Sandbox Code Playgroud)

我的问题是

关于混合inline递归的C标准有什么用?

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

ric*_*ici 7

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

使用内联函数说明符声明的函数是内联函数.使函数成为内联函数表明对函数的调用尽可能快.这些建议有效的程度是实施定义的.

奇怪的是,该段落中没有任何关于内联函数内容的内容; 只是呼叫应该很快.

编译器可以决定内联对函数的一些调用.例如,在递归内联函数中,编译器可以选择内联第一个k递归调用,对于某些小的值k.(当然,无论如何它可能会决定这样做.不声明函数'inline`并不会阻止编译器内联它.)