__stdcall

호출 규칙은 __stdcall Win32 API 함수를 호출하는 데 사용됩니다. 호출 수신자는 스택을 클린 컴파일러가 함수를 만듭니 vararg__cdecl. 이 호출 규칙을 사용하는 함수에는 함수 프로토타입이 필요합니다. 한 __stdcall 정자는 Microsoft 전용입니다.

구문

return-type__stdcallfunction-name[(argument-list)]

설명

다음 목록에서는 이러한 호출 규칙의 구현을 보여 줍니다.

요소 구현
인수 전달 순서 오른쪽에서 왼쪽
인수 전달 규칙 포인터 또는 참조 형식이 전달되지 않는 경우 값으로 전달
스택 유지 관리 책임 호출된 함수가 스택에서 자신의 인수를 꺼냅니다.
이름 데코레이션 규칙 이름 앞에 밑줄(_)이 접두사로 지정됩니다. 이름 뒤에는 at 기호(@)와 인수 목록의 바이트 수(10진수)가 옵니다. 따라서 int func( int a, double b )로 선언된 함수는 _func@12로 데코레이팅됩니다.
대/소문자 변환 규칙 없음

/Gz 컴파일러 옵션은 다른 호출 규칙으로 명시적으로 선언되지 않은 모든 함수에 대해 지정 __stdcall 합니다.

이전 버전 _stdcall 과의 호환성을 위해 __stdcall 컴파일러 옵션 /Za (언어 확장 사용 안 함) 을 지정하지 않는 한 동의어입니다.

한정자를 사용하여 선언된 함수는 .를 __stdcall 사용하여 __cdecl선언된 함수와 동일한 방식으로 값을 반환합니다.

ARM 및 x64 프로세서 __stdcall 의 경우 컴파일러에서 허용되고 무시됩니다. ARM 및 x64 아키텍처에서는 규칙에 따라 인수가 가능한 경우 레지스터에 전달되고 후속 인수는 스택에 전달됩니다.

비정적 클래스 함수의 경우 함수가 아웃오브 라인으로 정의되면 호출 규칙 한정자를 아웃오브 라인 정의에서 지정하지 않아도 됩니다. 즉, 클래스 비정적 멤버 메서드의 경우 선언하는 동안 지정된 호출 규칙이 정의 시 가정됩니다. 다음과 같은 클래스 정의가 주어진 경우

struct CMyClass {
   void __stdcall mymethod();
};

this

void CMyClass::mymethod() { return; }

다음 코드와 동일합니다.

void __stdcall CMyClass::mymethod() { return; }

예시

다음 예제에서는 표준 호출로 처리되는 모든 WINAPI 함수 형식의 __stdcall 결과를 사용합니다.

// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

참고 항목

인수 전달 및 명명 규칙
키워드