__cdecl
Microsoft 固有の仕様 →
これはC および C++ プログラムの既定の呼び出し規約です。スタックは呼び出し元によってクリーンアップされるためvararg の関数を作成できます。__cdecl の呼び出し規約は各関数呼び出しがスタックにクリーンアップ コードを含める必要があるため __stdcall は実行可能ファイルを作成します。次の一覧は呼び出し規約の実装を示します。
要素 |
実装 |
---|---|
順序引数を渡します。 |
右から左 |
スタック保守の役割 |
呼び出し元の関数は引数をスタックからポップされます。 |
名前の装飾規約 |
__cdecl のために C のリンケージ エクスポートするときにアンダースコア (_) はを除く関数というプレフィックスが付きます。 |
ケースの変換規則 |
大文字と小文字が発生する |
[!メモ]
関連情報については装飾名 を参照してください。
IPF (Itanium Processor Family) と x64 (IPF) プロセッサでは__cdecl はコンパイラによって受け付けられ無視 ; では名前付け規則ではパラメーターはレジスタに渡されます。
変数や関数名の前に cdecl の修飾子を配置します。C の名前付けと呼び出し規約が既定値であるためを使用する必要があるの場合 cdecl stdcall " /Gz " () または " /Gr " () fastcall コンパイラ オプションを指定した場合です。/Gd コンパイラ オプションは __cdecl の呼び出し規約を使用します。
静的でないクラスの関数の場合関数が定義されているとに EOF ラインである場合は呼び出し規約の修飾子はアウトに EOF ライン定義で指定する必要はありません。つまりクラスの非静的なメンバーのメソッドごとに宣言時に指定された呼び出し規約は定義時に使用されます。このクラスを指定すると定義
struct CMyClass {
void __cdecl mymethod();
};
this
void CMyClass::mymethod() { return; }
これと同じです。
void __cdecl CMyClass::mymethod() { return; }
使用例
次の例ではコンパイラは system の関数に対して C の名前付けと呼び出し規約を使用するように指示されます :
// 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, ...);