본문 바로가기

Software/C/C++

[C++] __stdcall or pascal 호출 변환

통상 우리가 사용하는

void __stdcall Fx1();이라는 함수가 있다면, 여기서 사용되는 __stdcall을 보게 된다.

__stdcall은 컴파일러에 대한 Microsoft확장이다. 이를 반드시 사용해야 한다.

win32 application 개발을 지원하는 compiler는 이러한 혹은 동일한 옵션을 반드시 가지고 있다.

Borland, Symantec,Watcom 모두 이러한 옵션을 가지고 있다.


__stdcall 하는 역할

__stdcall로 표시된 함수는 Pascal 호출 변환을 사용하게 된다.

Pascal호출 변환이란 : pascal호출 변환을 사용하는 함수는 호출자에게 리턴하기 전에 스택에서 파라미터를 제거한다. 그러나 일반적인 c/c++ 호출 변환에서는 호출자는 그 함수가 아닌 호출자가 스택을 소거하게 한다. windows는 Pascal호출 변환을 채택하는데 이것은 코드의 크기를 줄일 수 있다.


__stdcall 대신 pascall을 사용할 수 있다.

WINDEF.H에 다음과 같이 정의되어 있다.

#define pascal __stdcall

또는 다음과 같이 사용할 수도 있다.

#define STDMETHODCALLTYPE __stdcall