文章編號: 100832 - 上次校閱: 2005年12月9日 - 版次: 5.0 32 位元編譯器支援的呼叫慣例的描述
附註Microsoft Visual C++.NET 2002年和 Microsoft Visual C++.NET 2003年支援由 Microsoft.NET Framework 所提供的兩個 Managed 程式碼模型和不受管理的原生 Microsoft Windows 程式碼模型。本文資訊僅適用於不受管理的 Visual C++ 程式碼。 附註Microsoft Visual C++ 2005年支援 Managed 程式碼模型所提供的.NET Framework 以及未受管理的原生 Windows 程式碼模型。 結論Visual C++,32 位元版支援三種呼叫慣例: C (_cdecl)、 標準 (_stdcall) 和 fastcall (_fastcall)。編譯器不支援 Microsoft 編譯器所提供給 MS-DOS 和 16 位元 Windows Pascal 命名法呼叫慣例 (_pascal)。 下表摘要說明呼叫慣例。
_cdecl _stdcall _fastcall
-------------------------------------------------------------------
Arguments Pushed R to L Pushed R to L Note 3
Stack cleaned up by Caller Called Called
Naming convention Prepend "_" Note 1 Note 2
附註 1_stdcall 呼叫慣例會在每個函式名稱裝飾由前面上一個底線字元 (如同 _cdecl 慣例),並附加一個在 @"符號和十進位表示的所需的堆疊空間的位元組數。每個引數擴大為四個位元組的倍數。 附註 2_fastcall 呼叫慣例會在每個函式名稱裝飾可藉由前面上一個 @"符號和附加的正負號和所需的堆疊空間的位元組數之十進位表示。每個引數擴大為四個位元組的倍數。 附註 3第一個需要四個或更少個位元組的兩個函式引數放入暫存器中。呼叫者將從右至左推入至堆疊參數的其餘部分。這種行為可能會在未來版本中變更。 預設呼叫慣例為 _cdecl。如果應用程式宣告函式接受變動數目之引數具有 _fastcall 或 _stdcall 呼叫慣例,編譯器會使用 _cdecl 該函式呼叫慣例。其他相關資訊下列程式碼範例說明了程式碼產生在呼叫函式和被呼叫的函式,以支援 C 呼叫慣例。 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:100832?
(http://support.microsoft.com/kb/100832/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
