引數傳遞和命名慣例

Microsoft 特定的

Microsoft C++ 編譯器可讓您指定在函式和呼叫端之間傳遞引數和傳回值的慣例。 並非所有慣例都適用於所有支援的平台,部分慣例會使用平台特定實作。 在大部分情況下,會忽略在特定平台上指定不支援慣例的關鍵字或編譯器參數,並且使用平台預設慣例。

在 x86 平臺上,所有引數都會在傳遞時擴大為 32 位。 傳回值也會被擴大為 32 位元並在 EAX 暫存器中傳回,但 8 位元組結構例外,它是在 EDX:EAX 暫存器組中傳回。 較大的結構會在 EAX 暫存器中以隱藏傳回結構的指標傳回。 參數會從右至左推送至堆疊。 非 POD 的結構不會在暫存器中傳回。

如果在函式中使用 ESI、EDI、EBX 和 EBP 暫存器,編譯器會產生初構和終解程式碼來儲存和還原這些暫存器。

注意

從函式以傳值方式傳回結構、等位或類別時,類型的所有定義必須相同,否則程式可能會在執行階段失敗。

如需如何定義您自己的函式初構和表文程式碼的資訊,請參閱 Naked 函式呼叫

如需以 x64 平臺為目標之程式碼中預設呼叫慣例的詳細資訊,請參閱 x64 呼叫慣例 。 如需以 ARM 平臺為目標之程式碼中呼叫慣例問題的資訊,請參閱 常見的 Visual C++ ARM 移轉問題

Visual C/C++ 編譯器支援下列呼叫慣例。

關鍵字 堆疊清除 參數傳遞
__cdecl 呼叫端 以相反順序 (從右至左) 將參數推送至堆疊
__clrcall n/a 依照順序 (從左至右) 將參數載入至 CLR 運算式堆疊。
__stdcall 被呼叫端 以相反順序 (從右至左) 將參數推送至堆疊
__fastcall 被呼叫端 儲存在暫存器中,然後推送至堆疊
__thiscall 被呼叫端 推送到堆疊上; this 儲存在 ECX 中的指標
__vectorcall 被呼叫端 儲存在暫存器中,然後以相反順序 (從右至左) 推送至堆疊

如需相關資訊,請參閱 過時的呼叫慣例

END Microsoft 特定的

另請參閱

呼叫慣例