다음을 통해 공유


/Gd, /Gr, /Gz(호출 규칙)

업데이트: 2007년 11월

이러한 옵션은 함수 인수가 스택에 푸시되는 순서, 호출자 함수 또는 호출된 함수가 호출 마지막 단계에서 스택의 인수를 제거하는지 여부, 개별 함수를 식별하기 위해 컴파일러에 사용되는 이름 데코레이팅 규칙을 지정합니다.

/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 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오.

  2. C/C++ 폴더를 클릭합니다.

  3. 고급 속성 페이지를 클릭합니다.

  4. 호출 규칙 속성을 수정합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

참조

컴파일러 옵션

컴파일러 옵션 설정