2013-04-09 84 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

相關問題