ホームページ >バックエンド開発 >C++ >C++ の関数呼び出し規則は何ですか?

C++ の関数呼び出し規則は何ですか?

PHPz
PHPzオリジナル
2024-04-12 13:51:02572ブラウズ

C の呼び出し規則は、cdecl、fastcall、thiscall、stdcall など、関数の引数の受け渡し方法と値の戻り方を定義します。実際には、stdcall 呼び出し規則を使用して、DLL 内の関数をロードして呼び出すことができます。

C++ 中函数调用约定有哪些?

C 関数呼び出し規約

C では、呼び出し規約は、関数への引数の受け渡し方法と戻り方を定義します。呼び出し規約が異なると、パフォーマンス、メモリ使用量、コードの移植性の点で異なるトレードオフが生じます。

共通の呼び出し規則

  • cdecl (stdcall とも呼ばれます): Windows と Linux に適用され、パラメーターは右から右にプッシュされます。左スタック、左から右にポップします。
  • fastcall: Windows でのみ使用され、最初の 2 つのパラメーターはレジスターを介して渡され、他のパラメーターはスタックにプッシュされます。
  • thiscall: メンバー関数のオブジェクト指向プログラミングで使用される this ポインターは、最初のパラメーターとしてレジスターを介して渡されます。
  • stdcall: cdecl と似ていますが、Windows スタイルの名前装飾を使用します。

実践的なケース

次の C コードは、関数を呼び出すための stdcall の使用法を示しています。

#include <windows.h> // 只适用于 Windows

typedef void (WINAPI *pfnPrintString)(const char*);

int main()
{
    // 加载 DLL 并获取函数指针
    HMODULE hDll = LoadLibrary("mydll.dll");
    pfnPrintString PrintString = (pfnPrintString)GetProcAddress(hDll, "PrintString");

    // 调用函数,传递参数
    PrintString("Hello, world!");

    // 卸载 DLL
    FreeLibrary(hDll);

    return 0;
}

この例では、stdcall は次のとおりです。呼び出しに使用される 慣例として、DLL から PrintString 関数をロードして呼び出します。

以上がC++ の関数呼び出し規則は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。