C 如果我们将递归函数作为内联函数,会发生什么?

C 如果我们将递归函数作为内联函数,会发生什么?,c,recursion,inline-functions,C,Recursion,Inline Functions,我对内联函数有疑问。内联函数不涉及任何函数调用,只涉及在调用内联函数时替换函数定义。内联函数与宏不同,具有类型强制。 如果递归函数内联,会发生什么?内联不是保证,而是请求 递归内联函数(通常)不会内联 正如一些评论者所指出的,在一些特殊情况下(例如,使用特定于编译器的pragma),内联是可能的 内联仅是对编译器的建议,并不保证函数将内联 显然,编译器不能无限地内联递归函数。它可能根本不内联,也可能只内联几层。可能重复@SecurityMatt,下次我可能会更加小心。谢谢。奇怪的回答是:许多编

我对内联函数有疑问。内联函数不涉及任何函数调用,只涉及在调用内联函数时替换函数定义。内联函数与宏不同,具有类型强制。 如果递归函数内联,会发生什么?

内联不是保证,而是请求

递归内联函数(通常)不会内联

  • 正如一些评论者所指出的,在一些特殊情况下(例如,使用特定于编译器的pragma),内联是可能的

内联
仅是对编译器的建议,并不保证函数将内联


显然,编译器不能无限地内联递归函数。它可能根本不内联,也可能只内联几层。

可能重复@SecurityMatt,下次我可能会更加小心。谢谢。奇怪的回答是:许多编译器也可以内联扩展一些递归函数;Microsoft实现不会内联递归函数,除非它们有一个#pragma inline depth(n)行,该行指定函数将具有的最大递归深度。@VenkateshKuppan我在下面放置了一个链接,链接到Alexey Fruze的答案,您可以在那里阅读。只是因为它是递归的,所以喜欢与您共享链接,但这并不意味着您的编译器不会将其内联:改进您的答案,使用@SecurityMatt给出的链接,是的,大多数编译器不内联递归函数,但有些编译器会……请阅读我对问题的评论。