> 백엔드 개발 > C++ > C++의 함수 호출 규칙은 무엇입니까?

C++의 함수 호출 규칙은 무엇입니까?

PHPz
풀어 주다: 2024-04-12 13:51:02
원래의
577명이 탐색했습니다.

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;
}
로그인 후 복사

이 예에서 PrintString 함수는 DLL에서 로드되고 stdcall 호출 규칙을 사용하여 호출됩니다.

위 내용은 C++의 함수 호출 규칙은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿