我对内联函数有疑问。内联函数不涉及任何函数调用,只是在对内联函数进行调用的任何地方替换函数定义。内联函数具有不同于宏的类型执行。 如果递归函数是内联的,会发生什么?如果我们将递归函数作为内联函数会发生什么?
回答
“内联”不是保证,这是一个请求。
您的递归内联函数不会(通常)内联。
- 作为一些评论者指出,有是特殊情况下(例如,使用特定的编译器的编译指示),在该内联是可能的。
仅仅因为它是递归的,并不意味着你的编译器不会内联它:http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt 2013-04-09 18:44:05
提高你的答案,与@SecurityMatt给出的链接,是的,大多数编译器不内联递归函数,但一些做....读我的评论也问题。 – 2013-04-09 18:50:31
inline
仅仅是对编译器的建议,并不保证函数将被内联。
显然,编译器将无法无限地内联递归函数。它可能根本没有内联,也可能只是内联几个级别。
[在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
- 1. 如果将递归函数定义为内联会发生什么?
- 2. 将内联函数作为C中的参数传递时会发生什么?
- 3. 虚函数内联函数会发生什么情况?
- 4. 当我们试图将函数作为参数传递给同一个函数时会发生什么?
- 5. 当我们在函数内部传递参数时会发生什么?
- 6. 递归内联函数
- 7. 函数递归,SAS中会发生什么?
- 8. 这个递归函数让我困惑,发生了什么?
- 9. 如果我在OnPaint()函数中使用CClientDC会发生什么?
- 10. 将JavaScript函数作为变量关闭时会发生什么?
- 11. 如果我们在课堂上有私人构造函数会发生什么?
- 12. 为什么我的Perl递归函数永远不会结束?
- 13. 以下递归函数的非递归函数是什么?
- 14. 如果函数(x)可以工作,为什么我们需要函数()?
- 15. 有什么方法可以内联递归函数吗?
- 16. 如果我递归调用ajax函数会发生什么?它可能会导致任何问题。
- 17. 递归函数溢出,为什么?
- 18. 如何将我的迭代函数转换为递归函数?
- 19. 为什么我的递归函数不起作用?
- 20. 如果我们使用:操作符在函数内定义一个属性会发生什么?
- 21. 将递归函数转换为非递归函数
- 22. 如果我们通过kzalloc函数大小参数值为0,那么会发生什么?
- 23. 什么是内联函数?
- 24. 模板函数+函子参数,为什么函子不内联?
- 25. 为什么我们想要将类传递给函数
- 26. 为什么我的递归函数没有第二个参数?
- 27. 如果从析构函数调用构造函数,会发生什么情况?
- 28. 为什么我不能将Clojurescript函数作为回调函数传递给Javascript?
- 29. 如果我从构造函数中抛出异常,构造函数中的释放内存会发生什么?
- 30. 如果函数内引用了一个变量,那么会发生什么
可能的重复http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt 2013-04-09 18:08:14
@SecurityMatt可能会在下次我会更加小心。谢谢。 – 2013-04-09 18:11:05
奇怪的答案,但:许多编译器也可以内联扩展一些递归函数; Microsoft实现不会内联递归函数,除非它们具有#pragma内联深度(n)行,该行指定函数将具有的最大回覆深度。 – 2013-04-09 18:18:35