728x90

 

 

Argument Passing and Naming Conventions

Learn more about: Argument Passing and Naming Conventions

docs.microsoft.com

 

__cdecl

visual c/c++ 컴파일러에서 지원하는 calling convetion의 하나이다.

키워드 __cdecl을 사용하게 되면 stack cleanup 주체는 caller이고 

스택에 매개변수를 push 할때 매개변수 반대 순서로 스택에 저장하게 된다.

 

이외에도 다양한 calling convetion을 지정하는 키워드 들이 있다.

 

아래와 같이 visual studio에서 default calling covention을 설정하게 되면 calling convention을 생략하고 사용 가능하다.

 

아래와 같이 메인함수 지역변수 a,b는 주소값이 감소하는 반면

매개변수 aa,bb는 주소값이 증가하는 것을 확인할 수 있다.

 

하지만 64bit에서는 그렇지 않다!

 

이는 컴파일러가 64bit에서 스택프레임을 관리하는 방식이 다르기 때문인데 자세한 내용은 아래 문헌을 참고하자.

 

x64 stack usage

Learn more about: x64 stack usage

docs.microsoft.com

 

결론

__cdcel은 calling convertion을 지정하는 키워드 중의 하나로 __cdcel로 지정된 함수의 매개변수는 뒤에서 부터 스택에 쌓인다. 기본적으로 visual studio에 default convetion으로 등록되어 있다.

 

 

참고

 

C언어 코딩 :: 함수호출규약 __cdecl

C언어의 함수호출규약(function Calling Convention)에 대해 이해합니다. __cdecl __stdcall __fastcall...

blog.naver.com

 

Argument Passing and Naming Conventions

Learn more about: Argument Passing and Naming Conventions

docs.microsoft.com

 

728x90

'Programming Language > C++' 카테고리의 다른 글

C++/StackPadding  (0) 2021.11.23
c/c++/size_t,intptr_t,uintptr_t  (0) 2021.11.23
2-1_메인함수 훑어보기 namespace,using,#pragma once  (0) 2021.11.23
1-3_C++를 공부해야 하는 이유  (0) 2021.11.23
1-2_C++의 활용  (0) 2021.11.23

+ Recent posts