__stdcall

読み:アンダースコア・アンダースコア・スタンダードコール
外語:__stdcall: Standard call
品詞:名詞

80x86系プロセッサにおけるCの独自機能の一つで、数種類ある関数の呼び出し規約の一つ。

Stdcall呼び出しシーケンスを使って関数を呼び出す規約には、次のような特徴がある。

  • 引数の渡しかた: スタック経由のみ
  • スタックへの積みかた: 右から左にPUSHする
  • スタックに積まれた引数の始末: 関数が呼び出された側で行なう

その他、次のような特徴がある。

  • _を生成しない
  • 大文字・小文字を区別しない
  • 関数は引数の正確な数と型を渡す必要がある

変数の型の特定が必要なため、__stdcallの関数はプロトタイプ宣言が必須である。

殆どのWin32 APIは__stdcallで定義されている。

より具体的には、Microsoft Visual C++ 2003環境では、windef.hで次のように定義される。

  • #define WINAPI __stdcall

こうして、Win32 APIは概ね、関数名の前にWINAPIを付けて表現される。例えば、

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow

);

といった具合である。