__thiscall
Microsoft 관련__thiscall
호출 규칙은 x86 아키텍처의 C++ 클래스 멤버 함수에서 사용됩니다. 변수 인수(vararg
함수)를 사용하지 않는 멤버 함수에서 사용하는 기본 호출 규칙입니다.
아래에서 __thiscall
호출 수신자는 스택을 클린, 이는 함수에 대해 vararg
불가능합니다. 인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다. 포인터는 this
스택이 아닌 등록 ECX를 통해 전달됩니다.
ARM, ARM64 및 x64 컴퓨터에서 __thiscall
컴파일러에서 허용되고 무시됩니다. 기본적으로 레지스터 기반 호출 규칙을 사용하기 때문입니다.
한 가지 이유는 __thiscall
멤버 함수가 기본적으로 사용하는 __clrcall
클래스에 있기 때문입니다. 이 경우 네이티브 코드에서 개별 멤버 함수를 호출할 수 있도록 만들 수 있습니다 __thiscall
.
컴파일할 /clr:pure
때는 달리 지정하지 않는 한 모든 함수 및 함수 포인터가 __clrcall
표시됩니다. /clr:pure
/clr:safe
및 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017에서는 지원되지 않습니다.
vararg
멤버 함수는 호출 규칙을 사용합니다 __cdecl
. 모든 함수 인수는 스택에 푸시되고 포인터는 this
스택에 마지막으로 배치됩니다.
이 호출 규칙은 C++에만 적용되므로 C 이름 장식 체계가 없습니다.
비정적 클래스 멤버 함수를 아웃 오브 라인으로 정의하는 경우 선언에서만 호출 규칙 한정자를 지정합니다. 아웃 오브 라인 정의에서 다시 지정할 필요가 없습니다. 컴파일러는 정의 지점에서 선언하는 동안 지정된 호출 규칙을 사용합니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기