__fastcall

Microsoft 專有的

__Fastcall 呼叫慣例指定函式的引數傳入暫存器,請儘可能的。下列清單會顯示這個呼叫慣例的實作。

項目

實作

傳遞引數的順序

在前兩個 DWORD 或較小的引數中傳遞 ECX 並與暫存器。 所有其他引數直接傳遞至左邊。

堆疊維護責任

從堆疊引數呼叫函式的 pop。

名稱裝飾慣例

小老鼠符號 (@) 有前置的名稱; 小老鼠符號後面跟著中的位元組數目 (十進位) 中的參數清單加到名稱。

大小寫轉譯慣例

執行不區分大小的轉譯。

注意事項注意事項

將來的編譯器版本可能會使用不同的暫存器,以儲存參數。

使用 /Gr 編譯器選項會導致編譯為 fastcall,除非函式宣告有衝突的屬性,或是函式名稱的模組中的每個函式main。

在 Itanium 處理器系列 (IPF) 與 AMD64 電腦上, __fastcall 加以接受並由編譯器 ; 略過 IPF 序號依照慣例,所傳遞的參數在暫存器中。

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

struct CMyClass {
   void __fastcall mymethod();
};

this

void CMyClass::mymethod() { return; }

這等於是

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

範例

在下列範例中,函式名為DeleteAggrWrapper在暫存器中傳遞的引數:

// Example of the __fastcall keyword
#define FASTCALL    __fastcall
   
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

請參閱

參考

引數傳遞,和命名慣例

C + + 關鍵字