__fastcall

Microsoft 전용

호출 규칙은 __fastcall 가능한 경우 함수에 대한 인수를 레지스터에 전달하도록 지정합니다. 이 호출 규칙은 x86 아키텍처에만 적용됩니다. 다음 목록에서는 이러한 호출 규칙의 구현을 보여 줍니다.

요소 구현
인수 전달 순서 왼쪽에서 오른쪽으로 인수 목록에 있는 처음 두 DWORD 개 또는 더 작은 인수는 ECX 및 EDX 레지스터에 전달됩니다. 다른 모든 인수는 오른쪽에서 왼쪽으로 스택에 전달됩니다.
스택 유지 관리 책임 호출된 함수가 스택에서 인수를 꺼냅니다.
이름 데코레이션 규칙 기호(@)에 이름 앞에 접두사로 지정됩니다. 매개 변수 목록의 바이트 수(10진수)가 뒤에 붙는 at 기호는 이름에 접미사가 붙습니다.
대/소문자 변환 규칙 대/소문자 변환은 수행되지 않습니다.
클래스, 구조체 및 공용 구조체 크기에 관계없이 "멀티바이트" 형식으로 처리되고 스택에 전달됩니다.
열거형 및 열거형 클래스 레지스터에 의해 기본 형식이 전달되는 경우 레지스터에 의해 전달됩니다. 예를 들어 기본 형식이 intunsigned int 크기가 8, 16 또는 32비트인 경우입니다.

참고 항목

이후 컴파일러 버전은 다른 레지스터를 사용하여 매개 변수를 저장할 수도 있습니다.

/Gr 컴파일러 옵션을 사용하면 함수가 충돌하는 특성을 사용하여 선언되거나 함수 이름이 선언되지 않는 한 모듈의 각 함수가 컴파일 __fastcall 됩니다main.

__fastcall 이 키워드(keyword) ARM 및 x64 아키텍처를 대상으로 하는 컴파일러에서 허용되고 무시됩니다. x64 칩에서는 규칙에 따라 처음 4개의 인수가 가능한 경우 레지스터에 전달되고 스택에 추가 인수가 전달됩니다. 자세한 내용은 x64 호출 규칙을 참조 하세요. ARM 칩의 경우 최대 4개의 정수 인수와 8개의 부동 소수점 인수가 레지스터로 전달될 수 있으며 추가 인수는 스택에 전달됩니다.

비정적 클래스 함수의 경우 함수가 오프라인으로 정의된 경우 호출 규칙 한정자를 아웃 오브 라인 정의에 지정할 필요가 없습니다. 즉, 클래스 비정적 멤버 메서드의 경우 선언하는 동안 지정된 호출 규칙이 정의 시 가정됩니다. 다음의 클래스 정의를 가정해 봅니다.

struct CMyClass {
   void __fastcall mymethod();
};

다음 코드는

void CMyClass::mymethod() { return; }

다음 코드 조각과 일치합니다.

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

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

예시

다음 예제에서 DeleteAggrWrapper 함수에는 레지스터로 인수가 전달됩니다.

// Example of the __fastcall keyword
#define FASTCALL    __fastcall

void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Microsoft 전용 종료

참고 항목

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