/Gd, /Gr, /Gz(호출 규칙)
이러한 옵션은 함수 인수가 스택에 푸시되는 순서, 호출자 함수 또는 호출된 함수가 호출 마지막 단계에서 스택의 인수를 제거하는지 여부, 개별 함수를 식별하기 위해 컴파일러에 사용되는 이름 데코레이팅 규칙을 지정합니다.
/Gd
/Gr
/Gz
설명
참고
이러한 컴파일러 옵션은 x86을 대상으로 한 컴파일러에서만 사용할 수 있습니다. x64 또는 Itanium을 대상으로 한 컴파일러에서는 이러한 컴파일러 옵션을 사용할 수 없습니다.
/Gd는 기본 설정값으로, C++ 멤버 함수와 __stdcall 또는 __fastcall이 표시된 함수를 제외한 모든 함수에 __cdecl 호출 규칙을 지정합니다.
/Gr는 C++ 멤버 함수와 __cdecl 또는 __stdcall이 표시된 함수를 제외한 모든 함수에 __fastcall 호출 규칙을 지정합니다. 모든 __fastcall 함수는 프로토타입을 가져야 합니다.
/Gz는 C++ 멤버 함수와 __cdecl 또는 __fastcall이 표시된 함수를 제외한 모든 함수에 __stdcall 호출 규칙을 지정합니다. 모든 __stdcall 함수는 프로토타입을 가져야 합니다.
가변 인수를 취하는 함수는 __cdecl로 표시해야 합니다.
/Gd, /Gr 및 /Gz는 /clr:safe 또는 /clr:pure와 함께 사용할 수 없습니다.
참고
x86 프로세서의 경우 기본적으로 C++ 멤버 함수에서는 __thiscall을 사용합니다.
모든 프로세서에 대해 __cdecl, __fastcall 또는 __stdcall로서 명시적으로 표시된 멤버 함수는 지정된 호출 규칙을 사용합니다. 다양한 수의 인수를 가지는 멤버 함수는 항상 __cdecl 호출 규칙을 사용합니다.
__cdecl 특성
C에서 __cdecl 명명 규칙은 앞에 밑줄(_)이 오는 함수 이름을 사용하며, 대/소문자 변환은 수행되지 않습니다. extern "C"로 선언되는 경우를 제외하고 C++ 함수는 다른 이름 데코레이팅 구성표를 사용합니다. 자세한 내용은 데코레이팅된 이름을 참조하십시오.
__fastcall 특성
__fastcall 함수의 인수 중 일부는 레지스터에 전달되고(x86 프로세서의 경우 EXC 및 EDX) 나머지 인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다. 호출된 루틴은 반환하기 전에 스택에서 이 인수를 꺼냅니다. 일반적으로 /Gr는 실행 시간을 줄입니다.
참고
인라인 어셈블리 언어로 작성된 함수에 대해 __fastcall 호출 규칙을 사용할 때는 주의하십시오. 레지스터 사용과 컴파일러의 사용이 충돌할 수 있습니다.
C에서 __fastcall 명명 규칙은 앞에 (@) 기호가 오고 뒤에 바이트 단위로 표시된 함수 인수 크기가 오는 함수 이름을 사용합니다. 대/소문자 변환은 수행되지 않습니다. 컴파일러는 명명 규칙에 다음 템플릿을 사용합니다.
@function_name@number
__fastcall 명명 규칙을 사용할 때 표준 포함 파일을 사용합니다. 그렇지 않으면 확인할 수 없는 외부 참조가 발생하게 됩니다.
__stdcall 특성
__stdcall 함수의 인수는 스택에 오른쪽부터 왼쪽으로 넣어지고,호출된 함수는 반환되기 전에 스택에서 이 인수를 꺼냅니다.
C에서 __stdcall 명명 규칙은 앞에 밑줄(_)이 오고 뒤에 (@) 기호와 바이트 단위로 표시된 함수의 인수 크기가 오는 함수 이름을 사용합니다. 대/소문자 변환은 수행되지 않습니다. 컴파일러는 명명 규칙에 다음 템플릿을 사용합니다.
_functionname@number
x86 Specific
이 옵션은 C++ 메서드와 함수의 이름 데코레이션에 영향을 주지 않습니다. extern "C"로 선언된 것을 제외하고 C++ 메서드와 함수는 다른 이름 데코레이팅 구성표를 사용합니다. 자세한 내용은 데코레이팅된 이름을 참조하십시오.
호출 규칙에 대한 자세한 내용은 Calling Conventions를 참조하십시오.
END x86 Specific
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오.
C/C++ 폴더를 클릭합니다.
고급 속성 페이지를 클릭합니다.
호출 규칙 속성을 수정합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- CallingConvention을 참조하십시오.