2010-06-23 84 views
2

這裏是關於C++中內聯函數的一個小問題。C++中的內聯函數

在C++編譯的哪個階段是在調用中實際內聯的函數?

這基本上是如何工作的。

可以說,如果編譯器已經決定在程序員在函數前面使用內聯關鍵字請求一個特定函數必須內聯,那麼編譯器何時爲程序員做了這些.i意思是在什麼階段彙編。

它在預處理階段就像在c宏一樣擴展嗎?

+0

相關信息:http://stackoverflow.com/questions/1759300/c-when-should-i-write-the-keyword-inline-for-a-function-method – Alerty 2010-06-23 18:59:07

+0

上述重複是基於討論關於內聯函數的概念。但我的問題不是關於這個概念,而是關於編譯過程。 – Vijay 2010-06-23 19:01:38

+0

@Georg Fritzsche:我編輯了我的評論;) – Alerty 2010-06-23 19:03:45

回答

4

它會因編譯器而異。其他編譯器中的某些階段在其他編譯器中沒有相應的階段。所以你的問題並沒有真正的答案。

但通常在創建函數的分析樹之後,但在代碼實際生成或許多優化完成之前完成。這是實現它的最佳選擇,因爲您希望優化器可以使用最大量的信息。

像做預處理器宏擴展一樣做,一般來說還爲時過早。然後,編譯器沒有足夠的信息來進行適當的類型檢查,並且更容易導致導致副作用發生的次數更多等錯誤。

而且GMan在評論中提供了一個很好的維基百科鏈接,這個鏈接比我在這裏的function inlining process更詳細。我的回答基本上是真實的,但是有很多變化,甚至比我想象的還要多。