__fastcall
Microsoft 固有の仕様 →
__fastcall の呼び出し規約は可能であれば関数の引数はレジスタで渡されたことを指定します。次の一覧は呼び出し規約の実装を示します。
要素 |
実装 |
---|---|
順序引数を渡します。 |
最初の 2 ダブル ワードか小さい引数はレジスタ ECX および EDX に渡されます ; 他の引数はすべて右から左に渡されます。 |
スタック保守の役割 |
呼び出される関数は引数をスタックからポップされます。 |
名前の装飾規約 |
アット マーク (@) は名前の先頭に ; パラメーター リストのバイト数 (10 進) 前にアット マークはサフィックスとして付けられます。 |
ケースの変換規則 |
実行される大文字と小文字はありません。 |
[!メモ]
将来のバージョンのコンパイラではパラメーターを格納する複数のレジスタを使用する場合があります。
/Gr を使用して関数が競合する属性として宣言されてまたは関数の名前はです main コンパイラ オプションはモジュールの各関数は fastcall としてコンパイルされます。
IPF (Itanium Processor Family) や (IPF) AMD-64 コンピューターで**__fastcall** はコンパイラによって受け付けられ無視 ; はチップで規則ではパラメーターはレジスタに渡されます。
静的でないクラスの関数の場合関数が定義されているとに EOF ラインである場合は呼び出し規約の修飾子はアウトに EOF ライン定義で指定する必要はありません。つまりクラスの非静的なメンバーのメソッドごとに宣言時に指定された呼び出し規約は定義時に使用されます。このクラスを指定すると定義
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, ...);