我對內聯函數有疑問。內聯函數不涉及任何函數調用,只是在對內聯函數進行調用的任何地方替換函數定義。內聯函數具有不同於宏的類型執行。 如果遞歸函數是內聯的,會發生什麼?如果我們將遞歸函數作爲內聯函數會發生什麼?
回答
「內聯」不是保證,這是一個請求。
您的遞歸內聯函數不會(通常)內聯。
- 作爲一些評論者指出,有是特殊情況下(例如,使用特定的編譯器的編譯指示),在該內聯是可能的。
僅僅因爲它是遞歸的,並不意味着你的編譯器不會內聯它: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