2013-04-09 41 views
6

我对内联函数有疑问。内联函数不涉及任何函数调用,只是在对内联函数进行调用的任何地方替换函数定义。内联函数具有不同于宏的类型执行。 如果递归函数是内联的,会发生什么?如果我们将递归函数作为内联函数会发生什么?

+3

可能的重复http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt 2013-04-09 18:08:14

+1

@SecurityMatt可能会在下次我会更加小心。谢谢。 – 2013-04-09 18:11:05

+1

奇怪的答案,但:许多编译器也可以内联扩展一些递归函数; Microsoft实现不会内联递归函数,除非它们具有#pragma内联深度(n)行,该行指定函数将具有的最大回覆深度。 – 2013-04-09 18:18:35

回答

4

“内联”不是保证,这是一个请求。

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

  • 作为一些评论者指出,有特殊情况下(例如,使用特定的编译器的编译指示),在该内联可能的。
+1

仅仅因为它是递归的,并不意味着你的编译器不会内联它:http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt 2013-04-09 18:44:05

+0

提高你的答案,与@SecurityMatt给出的链接,是的,大多数编译器不内联递归函数,但一些做....读我的评论也问题。 – 2013-04-09 18:50:31

5

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

显然,编译器将无法无限地内联递归函数。它可能根本没有内联,也可能只是内联几个级别。

+1

[在Microsoft编译器中可能的级别很低](http://wiki.answers.com/Q/What_is_inline_function_in_C_Can_you_make_inline_function_recursive_or_not_If_make_can_complier_will_compile_that_code)刚刚喜欢与您分享链接 – 2013-04-09 18:20:30

相关问题