2016-07-10 10 views
-2

我想知道是否有些C/C++編譯器實現類似於Pawn的股票關鍵字。C/C++中Pawn的「股票」函數同系物

典當,你可以聲明函數那樣:

stock xfunc(a, b) 
{ 
    [...] // Bla bla 
} 

該股關鍵字告訴編譯器根本不包括在編譯的二進制的作用,如果它不叫某處代碼。這使得功能兼容性可以這麼說,並且如果它不被使用,它不會增加二進制大小。

我會發現在C/C++中有這樣的東西是有用的,因爲我想包含一些函數,我不會立即在我的程序/代碼的第一次迭代中使用它。當然,有些人可能會告訴我,還有其他方法可以做到這一點,例如使用預處理宏等。我不想要另一種方式,我希望允許我在稍後使用這些函數,而不必取消註釋它們,改變一個宏使它們被編譯等(即無縫地)。但是...沒有編譯它們,因此增加我的可執行文件大小,當我不使用它們時!

我會說一個方便的功能。 謝謝!

P.S.如果答案是「它不包含在語言標準中」,那麼是否有編譯器使用特定的編譯指示,非官方的關鍵字等進行編譯?

編輯:我應該提到,我最感興趣的是虛擬功能的這個功能。我知道標準函數存在函數級鏈接,但虛擬函數呢?我認爲通常情況下,如果我沒有弄錯,虛擬funcs是否會被編譯,即使不用於維護與類原型的類佈局兼容?你能證實嗎?謝謝

+6

這通常在鏈接階段自動解決,c或C++不需要這樣的關鍵字。 –

+0

我寫了一個函數我希望它能夠編譯以儘快捕獲編譯器錯誤,因此我永遠不會使用宏或註釋將其從編譯中排除,因爲它無論如何都不會將它編入可執行文件中(如其他) – user463035818

+0

幾乎所有*編譯器都可以無縫地執行此操作。這並不需要成爲語言標準的一部分。我不明白爲什麼負責人應該在開發人員註釋這樣的功能時,鏈接器會做出更好的決定。如果你知道某些東西會被閒置,就不要寫下來。 –

回答

2

任何現代優化編譯器/鏈接器都會執行「死代碼消除」,並且不僅去除未調用的函數,而且還會去除所謂的函數中未使用的位。

+0

這是否也適用於虛擬功能?這是我的問題的主要動機(但有點忘了提及它,現在我做了)。 – Yannick

+1

只要編譯器可以看到它未被使用。如果您有疑問,請編譯一個例子並查看生成的asm。 –