2015-09-18 31 views

回答

2

似乎是一個很好的方式去在腳下射擊自己;更好的是,國際海事組織明確地將默認值保留爲__cdecl,並明確聲明__stdcall函數,因此不存在混淆的可能性。但是,如果你決定這樣做,一個好的開始就是閱讀GCC在線文檔;嘗試使用谷歌搜索「gcc手冊」,這應該帶你(e.g.) here

確保選擇與您的GCC版本相匹配的手冊版本,然後參考「功能屬性」部分;這應該將您指向-mrtd選項作爲您想要執行的操作的候選對象。在選擇指數看這件事,並按照參考看到:

-mrtd

使用不同的函數調用約定,在其功能 稱取的參數固定數量與回報指令,它在返回時彈出它們的參數。由於不需要在該處彈出 參數,因此在調用者中將一條指令保存爲 。

您可以指定使用此調用序列調用具有函數屬性「stdcall」的單個函數。您也可以使用函數屬性'cdecl'覆蓋-mrtd選項 。請參閱 函數屬性。

警告:此調用約定與Unix上通常使用的調用約定不兼容,因此如果需要調用 使用Unix編譯器編譯的庫,則不能使用它。另外,您必須爲所有帶有可變數量參數(包括printf)的函數提供函數原型;否則 爲這些功能的調用生成不正確的代碼。

此外,如果您調用的函數參數太多,嚴重錯誤的代碼結果。 (通常,額外的參數 無害忽略。)

相關問題