对于声明的函数" inline"是否合法?要递归?

时间:2015-03-05 23:03:44

标签: c recursion segmentation-fault inline language-lawyer

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

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

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

我使用gcc编译程序,并且没有任何警告

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

我的问题是

  

关于将inline与递归混合,C标准有何规定?

对我而言,不应该允许它是合乎逻辑的。

1 个答案:

答案 0 :(得分:7)

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

  

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

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

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