__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 이름 장식 체계가 없습니다.

비정적 클래스 멤버 함수를 아웃 오브 라인으로 정의하는 경우 선언에서만 호출 규칙 한정자를 지정합니다. 아웃 오브 라인 정의에서 다시 지정할 필요가 없습니다. 컴파일러는 정의 지점에서 선언하는 동안 지정된 호출 규칙을 사용합니다.

참고 항목

인수 전달 및 명명 규칙