首頁 >後端開發 >C++ >C++ 中函式呼叫約定有哪些?

C++ 中函式呼叫約定有哪些?

PHPz
PHPz原創
2024-04-12 13:51:02570瀏覽

C 中的呼叫約定定義了函數參數傳遞和傳回值的方式,包括 cdecl、fastcall、thiscall 和 stdcall。實戰中,stdcall 呼叫約定可用於載入和呼叫 DLL 中的函數。

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

C 函數呼叫約定

#在 C 中,呼叫約定定義了函數的參數傳遞和傳回的方式。不同的呼叫約定在效能、記憶體使用和程式碼可移植性方面具有不同的權衡取捨。

常見呼叫約定

  • cdecl(又稱stdcall):適用於Windows 和Linux,參數從右到左壓入棧,從左到右彈出。
  • fastcall:只在 Windows 中使用,透過暫存器傳遞前兩個參數,其他參數壓入堆疊。
  • 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn