관리 메뉴

드럼치는 프로그래머

[C/C++] 호출규약 __cdecl __stdcall __fastcall 본문

★─Programing/☆─C | C++

[C/C++] 호출규약 __cdecl __stdcall __fastcall

드럼치는한동이 2008. 5. 8. 01:53

호출 규약(calling convention)을 지정합니다. 다음은 MSDN에서 발췌한 호출규약 요약입니다.


[호출규약 : __cdecl]

Element Implementation

Argument-passing order

인자 전달 순서

Right to left

오른쪽에서 왼쪽 순서로 스택으로 전달

Stack-maintenance responsibility

스택 정리

Calling function pops the arguments from the stack

호출한 측에서 인자를 스택에서 꺼냄

Name-decoration convention

명명 규칙

Underscore character (_) is prefixed to names

이름 앞에 언더스코어(_)가 붙음

Case-translation convention

대소문자 변환

No case translation performed

대소문자 변환 없음



[호출규약 : __stdcall]

Element Implementation

Argument-passing order

인자 전달 순서

Right to left.

오른쪽에서 왼쪽 순서로 스택으로 전달

Stack-maintenance responsibility

스택 정리

Called function pops its own arguments from the stack.

불려진 함수가 스택에서 인자를 꺼냄

Name-decoration convention

명명규칙

An underscore (_) is prefixed to the name. The name is followed by the at sign (@) followed by the number of bytes (in decimal) in the argument list. Therefore, the function declared as int func( int a, double b ) is decorated as follows: _func@12

이름 앞에 _가 붙음. 이름 뒤에는 @표시가 붙고 그 뒤에 인자 목록의 바이트수가 10진수로 이어짐. 따라서, inf func( int a, double b )는 _func@12 와 같이 명명됨

Case-translation convention

대소문자 변환

None

없음



[호출규약 : __fastcall]

Element Implementation

Argument-passing order

인자 전달 순서

The first two DWORD or smaller arguments are passed in ECX and EDX registers; all other arguments are passed right to left.

처음 두 개의 DWORD 이하의 크기를 가지는 인자는 ECX와 EDX레지스터로 전달, 나머지 인자는 오른쪽에서 왼쪽으로 스택을 통해 전달

Stack-maintenance responsibility

스택 정리

Called function pops the arguments from the stack.

불려진 함수가 스택에서 인자를 꺼냄

Name-decoration convention

명명 규칙

At sign (@) is prefixed to names; an at sign followed by the number of bytes (in decimal) in the parameter list is suffixed to names.

이름 앞에 @가 붙음. 이름 뒤에도 @표시가 붙고 그 뒤에 인자 목록의 바이트수가 10진수로 이어짐.

Case-translation convention

대소문자 변환

No case translation performed.

변환 없음

Comments