__cdecl

Microsoft 專有的

此為預設呼叫慣例為 c 和 C++ 程式。由呼叫端會清除堆疊,因為其實一點都不 vararg 函式。__cdecl呼叫慣例會建立較大的可執行檔比 __stdcall,因為它不需要包含堆疊清除程式碼的每一個函式呼叫。下列清單會顯示這個呼叫慣例的實作。

項目

實作

傳遞引數的順序

由右至左

堆疊維護責任

呼叫函式會出現的引數由堆疊

名稱裝飾慣例

底線字元 (_) 有前置名稱,除了匯出 __cdecl 運作,使用 c 連結時。

大小寫轉譯慣例

執行不區分大小的轉譯

注意事項注意事項

如需相關資訊,請參閱裝飾名稱

在 Itanium 處理器系列 (IPF) 和 x64 處理器, __cdecl加以接受並由編譯器 ; 略過 在 IPF,依照慣例,傳遞參數暫存器中。

放置 __cdecl變數或函數名稱之前的修飾詞。因為 c 命名和呼叫慣例是預設值,唯一的時候您需要使用 __cdecl時,您已指定 /Gz (服務繼續操作) 或 /Gr (fastcall) 編譯器選項。/Gd 編譯器選項的軍隊__cdecl呼叫慣例。

對於非靜態類別的函式,函式是定義的出行,如果呼叫慣例修飾詞並沒有指定行超出定義上。也就是類別的非靜態成員方法,在宣告期間指定的呼叫慣例會假設為定義點。此類別定義中,

struct CMyClass {
   void __cdecl mymethod();
};

this

void CMyClass::mymethod() { return; }

這等於是

void __cdecl CMyClass::mymethod() { return; }

範例

在下列範例中,編譯器只須使用命名和呼叫慣例為 c system函式:

// Example of the __cdecl keyword on function
int __cdecl system(const char *);
// Example of the __cdecl keyword on function pointer
typedef BOOL (__cdecl *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

請參閱

參考

引數傳遞,和命名慣例

C + + 關鍵字