[解決済み] stdcallとは何ですか?
2022-04-24 20:42:14
質問
Win32のプログラミングを勉強しているのですが、その中で
WinMain
のプロトタイプのようなものです。
int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show )
私は、この
WINAPI
の識別子があり、それを見つけた。
#define WINAPI __stdcall
これは何をするものなのでしょうか? このように戻り値の後に全く何もないのは困惑します。 これは何ですか?
__stdcall
のために? 戻り値の型と関数名の間に何かあるのはどういう意味ですか?
どのように解決するのですか?
__stdcall
は、その関数に使用される呼び出し規約です。 これは、スタックのセットアップ、引数のプッシュ、戻り値の取得に適用されるルールをコンパイラに伝えるものです。
このほかにも、さまざまな呼び出し規約があります。
__cdecl
,
__thiscall
,
__fastcall
という素晴らしい名前の
__declspec(naked)
.
__stdcall
は、Win32システムコールの標準的な呼び出し規則です。
ウィキペディアでは 詳細 .
主に、自分のコードの外の関数(例えばOSのAPI)を呼び出す場合や、OSが自分を呼び出す場合(ここではWinMainの場合)などに問題となります。 コンパイラが正しい呼び出し規則を知らない場合、スタックが正しく管理されないため、非常に奇妙なクラッシュが発生する可能性があります。
関連
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] 型付けされた関数ポインタ?
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] なぜmemsetではなくbzeroを使用するのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
initializer element is not constant "というエラーが表示されるのですが?
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
C/C++の再定義
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?