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标准有什么用?
对我来说,不应该允许它是合乎逻辑的.
引用标准:(§6.7.4 函数说明符,第6段)
使用内联函数说明符声明的函数是内联函数.使函数成为内联函数表明对函数的调用尽可能快.这些建议有效的程度是实施定义的.
奇怪的是,该段落中没有任何关于内联函数内容的内容; 只是呼叫应该很快.
编译器可以决定内联对函数的一些调用.例如,在递归内联函数中,编译器可以选择内联第一个k
递归调用,对于某些小的值k
.(当然,无论如何它可能会决定这样做.不声明函数'inline`并不会阻止编译器内联它.)