【问题标题】:What happens if we make recursive functions as inline?如果我们将递归函数设为内联会发生什么?
【发布时间】:2013-04-01 07:38:29
【问题描述】:

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

【问题讨论】:

  • @SecurityMatt 可能是下次我会更加小心。谢谢。
  • 奇怪的答案但是:许多编译器也可以内联扩展一些递归函数; Microsoft 实现不会内联递归函数,除非它们有 #pragma inline depth(n) 行来指定函数将具有的最大递归深度。
  • @VenkateshKuppan 我在下面放了一个指向 Alexey Fruze 答案的链接,您可以在那里阅读。

标签: c recursion inline-functions


【解决方案1】:

“内联”不是保证,而是请求。

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

  • 正如一些评论者指出的那样,种特殊情况(例如,使用特定于编译器的编译指示)可以进行内联

【讨论】:

  • 仅仅因为它是递归的,并不意味着你的编译器不会内联它:msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx
  • 通过@SecurityMatt 提供的链接改进您的答案,是的,大多数编译器不会内联递归函数,但有些编译器会......阅读我对问题的评论。
【解决方案2】:

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

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

【讨论】:

猜你喜欢
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多