8

C/C++ (具体的には、私は MSVS を使用しています) では、どのような状況で、関数定義の呼び出し規約の指定について心配する必要があるでしょうか? それらは重要ですか?必要に応じて最適な規則を選択できる準拠していませんか (つまり、fastcall など)。

私の理解が不足しているかもしれませんが、引数がスタックに配置される順序などをプログラマーが気にする必要がある場合がいつになるかわかりません。また、コンパイラの最適化が、その特定の関数に最適なスキームを選択できない理由もわかりません。誰かが私に提供できる知識は素晴らしいでしょう。ありがとう!

4

2 に答える 2

10

一般的に、異なるコンパイラでコンパイルされているコードを統合する場合、呼び出し規約は重要です。たとえば、顧客が使用する DLL を公開している場合、エクスポートするすべての関数が一貫した予期される呼び出し規則を持っていることを確認する必要があります。

単一のプログラム内で、コンパイラは通常、各関数に使用する呼び出し規約を選択できます (通常、ルールは非常に単純です)。

于 2011-01-24T19:00:25.633 に答える
6

呼び出し規則は 1 つしかないため、64 ビット アプリケーションを気にする必要はありません。

次の場合は、32 ビット アプリケーションに注意する必要があります。

  • サードパーティのライブラリと対話し、これらのライブラリのヘッダーが正しい呼び出し規約を宣言していません。
  • 他の誰かが使用するライブラリまたは DLL を作成しています。コードを呼び出すときに他のコードが正しい呼び出し規則を使用するように、呼び出し規則を決定する必要があります。
于 2011-01-24T19:00:23.807 に答える