我正在考虑一下C编程语言,并开始想知道inline
如何与递归交互。我做了这个测试程序以找出答案。
static inline void f(void) {
f();
}
int main(void) {
f();
return 0;
}
我使用gcc
编译程序,并且没有任何警告
$ c99 -Wall -pedantic main.c -o a
我的问题是
关于将
inline
与递归混合,C标准有何规定?
对我而言,不应该允许它是合乎逻辑的。
答案 0 :(得分:7)
引用标准:(§6.7.4函数说明符,第6段)
使用内联函数说明符声明的函数是内联函数。使函数成为内联函数表明对函数的调用尽可能快。这些建议有效的程度是实施定义的。
奇怪的是,该段落中没有任何关于内联函数内容的内容;只是呼叫应该很快。
编译器可以决定内联调用该函数的某些。例如,在递归内联函数中,编译器可以选择内联第一个k
递归调用,以获得一些小的k
值。 (当然,它可能会决定这样做。不声明函数'inline`不会阻止编译器内联它。)