다음을 통해 공유


미리 정의된 매크로

미리 정의된 ANSI/ISO C99 및 Microsoft C++ 구현 전처리기 매크로를 나열합니다.

컴파일러는 사전 정의된 ANSI/ISO C99 C 전처리기 매크로를 인식하며 Microsoft C++ 구현은 그 외에 여러 매크로를 더 제공합니다. 이러한 전처리기 매크로는 인수를 사용하지 않으며 재정의될 수 없습니다. 이 문서에 나열된 미리 정의된 매크로 중 일부는 다중 값으로 정의됩니다.

ANSI 호환 미리 정의된 매크로

매크로

설명

__DATE__

현재 소스 파일의 컴파일 날짜입니다. 날짜는 Mmm dd yyyy 형태의 문자열 리터럴입니다. 해당 월 이름 Mmm은 TIME.H에서 선언된 asctime 라이브러리 함수에 의해 생성된 날짜와 동일합니다.

__FILE__

현재 소스 파일의 이름입니다. __FILE__은 문자열 리터럴로 확장됩니다. 파일의 전체 경로가 표시되도록 하려면 /FC(진단 소스 코드 파일의 전체 경로)를 사용합니다.

__func__

바깥쪽 함수의 정규화되지 않은 있는 그대로의 이름을 문자 배열로 반환합니다.

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__LINE__

현재 소스 파일의 줄 번호입니다. 줄 번호는 10진수 정수 리터럴입니다. #line 지시문을 사용하여 변경할 수 있습니다.

__STDC__

ANSI/ISO C99 표준을 준수함을 나타냅니다. /Za 컴파일러 옵션이 지정되어 있고 C++ 코드를 컴파일하지 않는 경우에만 정수 리터럴 상수 1로 정의되고 그렇지 않으면 정의되지 않습니다.

__TIME__

현재 소스 파일의 최근 컴파일 시간입니다. 시간은 hh:mm:ss 형식의 문자열 리터럴입니다.

__TIMESTAMP__

Ddd Mmm Date hh:mm:ss yyyy(Ddd는 요일 이름(약식)이고 Date는 1에서 31 사이의 정수임) 형식의 문자열 리터럴로 표현된 현재 소스 파일의 마지막 수정 날짜 및 시간입니다.

Microsoft 전용 미리 정의된 매크로

매크로

설명

_ATL_VER

정수 리터럴로 인코딩된 ATL 버전을 정의합니다.

__AVX__

/arch:AVX 또는 /arch:AVX2를 지정할 경우 정의됩니다.

__AVX2__

/arch:AVX2를 지정할 경우 정의됩니다.

_CHAR_UNSIGNED

기본 char 형식은 부호가 없습니다. /J를 지정할 경우 정의됩니다.

__CLR_VER

이 매크로는 응용 프로그램을 컴파일할 때 사용하는 공용 언어 런타임의 버전을 정의합니다. 반환되는 값은 다음과 같은 형식으로 인코딩된 정수 리터럴입니다.

Mmmbbbbb

다음은 각 문자에 대한 설명입니다.

  • M은 런타임의 주 버전입니다.

  • mm은 런타임의 부 버전입니다.

  • bbbbb는 빌드 번호입니다.

// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
   Console::WriteLine(__CLR_VER);
}

__cplusplus_cli

/clr, /clr:pure 또는 /clr:safe를 사용하여 컴파일하는 경우 정의됩니다. __Cplusplus_cli의 값은 정수 리터럴 200406입니다. __cplusplus_cli는 변환 단위 전체에 적용됩니다.

// cplusplus_cli.cpp
// compile with: /clr
#include "stdio.h"
int main() {
   #ifdef __cplusplus_cli
      printf("%d\n", __cplusplus_cli);
   #else
      printf("not defined\n");
   #endif
}

__cplusplus_winrt

/ZW 옵션을 사용하여 컴파일하는 경우 정의됩니다. __cplusplus_winrt의 값은 정수 리터럴 201009입니다.

__COUNTER__

0에서 시작하여 소스 파일 또는 소스 파일에 포함된 헤더에서 사용될 때마다 1씩 증가하는 정수 리터럴로 확장합니다. 미리 컴파일된 헤더를 사용하면 __COUNTER__가 해당 상태를 기억합니다.

다음 예제에서는 __COUNTER__를 사용하여 형식이 동일한 세 가지 다른 개체에 고유 식별자를 할당합니다.

먼저, 다음 클래스 정의를 가정합니다. 생성자는 매개 변수로 정수를 사용합니다.

응용 프로그램은 main에서 exampleClass를 고유 식별자 매개 변수로 사용하여 __COUNTER__ 형식의 세 개체를 선언합니다.

__cplusplus

C++ 프로그램에서만 사용되는 매크로입니다.

_CPPRTTI

/GR로 컴파일된 코드에서 사용되는 매크로입니다(런타임 형식 정보 사용).

_CPPUNWIND

/EH(예외 처리 모델) 플래그 중 하나를 사용하여 컴파일된 코드에서 사용되는 매크로입니다.

_DEBUG

/LDd, /MDd/MTd를 사용하여 컴파일하는 경우 정의됩니다.

_DLL

/MD 또는 /MDd(다중 스레드 DLL)를 지정하는 경우 정의됩니다.

__FUNCDNAME__

함수에만 유효합니다. 바깥쪽 함수의 데코레이팅된 이름을 문자열 리터럴로 정의합니다.

__FUNCDNAME__/EP 또는 /P 컴파일러 옵션을 사용하는 경우 확장되지 않습니다.

다음 예제는 __FUNCDNAME__, __FUNCSIG__ 및 __FUNCTION__ 매크로를 사용하여 함수 정보를 표시합니다.

__FUNCSIG__

함수에만 유효합니다. 바깥쪽 함수의 시그니처를 문자열 리티럴로 정의합니다.

__FUNCSIG__/EP 또는 /P 컴파일러 옵션을 사용하는 경우 확장되지 않습니다.

64비트 운영 체제에서 호출 규칙은 기본적으로 __cdecl입니다.

예제는 __FUNCDNAME__을 참조하세요.

__FUNCTION__

함수에만 유효합니다. 바깥쪽 함수의 데코레이팅되지 않은 이름을 문자열 리터럴로 정의합니다.

__FUNCTION__/EP 또는 /P 컴파일러 옵션을 사용하는 경우 확장되지 않습니다.

예제는 __FUNCDNAME__을 참조하세요.

_INTEGRAL_MAX_BITS

정수 계열 형식에 대한 최대 크기(비트 단위)를 정수 리터럴로 보고합니다.

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_AMD64

X64 프로세서를 대상으로 하는 컴파일에 대해 정의됩니다.

_M_ARM

ARM 프로세서를 대상으로 하는 컴파일에 대해 정의됩니다.

_M_CEE

/clr(예: /clr:oldSyntax, /clr:safe) 형식을 사용하는 컴파일에서 사용되는 매크로입니다.

_M_CEE_PURE

/clr:pure를 사용하는 컴파일에서 사용되는 매크로입니다.

_M_CEE_SAFE

/clr:safe를 사용하는 컴파일에서 사용되는 매크로입니다.

_M_IX86

x86 프로세서를 대상으로 하는 컴파일에 대해 정의됩니다. 이 매크로는 x64 프로세서에서 사용할 수 없습니다.

_M_ARM_FP

사용된 /arch 컴파일러 옵션을 나타내는 정수 리터럴 값으로 확장됩니다.

  • 30~39 범위에서 /arch ARM 옵션이 명시되어 있지 않을 경우 ARM의 기본 아키텍처(VFPv3)가 사용되었음을 보여 줍니다.

  • /arch:VFPv4가 사용된 경우 범위 40-49에 있습니다.

  • 자세한 내용은 /arch(x86)를 참조하십시오.

_M_IX86_FP

사용된 /arch 컴파일러 옵션을 나타내는 정수 리터럴 값으로 확장됩니다.

  • /arch:IA32가 사용된 경우 0입니다.

  • /arch:SSE가 사용된 경우 1입니다.

  • /arch:SSE2, /arch:AVX 또는 /arch:AVX2가 사용된 경우 2입니다. /arch가 지정되지 않은 경우 이 값이 기본값입니다. /arch:AVX가 지정된 경우 __AVX__ 매크로도 정의됩니다. /arch:AVX2가 지정된 경우 __AVX____AVX2__도 정의됩니다.

  • 자세한 내용은 /arch(x86)를 참조하십시오.

_M_X64

X64 프로세서를 대상으로 하는 컴파일에 대해 정의됩니다.

_MANAGED

/clr을 지정하는 경우 1로 정의됩니다.

_MFC_VER

정수 리터럴로 인코딩된 MFC 버전을 정의합니다.

_MSC_BUILD

컴파일러 버전 번호의 수정 번호 구성 요소를 포함하는 정수 리터럴로 확장됩니다. 수정 번호는 마침표로 구분된 버전 번호의 네 번째 구성 요소입니다. 예를 들어, Visual C++ 컴파일러의 버전 번호가 15.00.20706.01인 경우 _MSC_BUILD 매크로를 실행하면 1이 나옵니다.

_MSC_EXTENSIONS

이 매크로는 /Ze 컴파일러 옵션(기본값)을 사용하여 컴파일하는 경우 정의됩니다. 정의된 경우 해당 값은 1입니다.

_MSC_FULL_VER

컴파일러 버전 번호의 주, 부 및 빌드 번호 구성 요소를 인코딩하는 정수 리터럴로 평가됩니다. 주 번호는 마침표로 구분된 버전 번호의 첫 번째 구성 요소이며, 부 번호는 두 번째 구성 요소, 빌드 번호는 세 번째 구성 요소입니다. 예를 들어, Visual C++ 컴파일러의 버전 번호가 15.00.20706.01인 경우 _MSC_FULL_VER 매크로를 실행하면 150020706이 나옵니다. 컴파일러의 버전 번호를 보려면 명령줄에 cl /?를 입력합니다.

_MSC_VER

컴파일러 버전 번호의 주 번호 및 부 번호 구성 요소를 인코딩하는 정수 리터럴로 평가됩니다. 주 번호는 마침표로 구분된 버전 번호의 첫 번째 구성 요소이며, 부 번호는 두 번째 구성 요소입니다.

예를 들어, Visual C++ 컴파일러의 버전 번호가 17.00.51106.1인 경우 _MSC_VER 매크로를 실행하면 1700이 나옵니다. 컴파일러의 버전 번호를 보려면 명령줄에 cl /?를 입력합니다.

__MSVC_RUNTIME_CHECKS

/RTC 컴파일러 옵션 중 하나를 지정하는 경우 정의됩니다.

_MT

/MD 또는 /MDd(다중 스레드 DLL) 또는 /MT 또는 /MTd(다중 스레드)를 지정하는 경우 정의됩니다.

_NATIVE_WCHAR_T_DEFINED

/Zc:wchar_t를 사용하는 경우 정의됩니다.

_OPENMP

/openmp로 컴파일할 때 정의되며, Visual C++를 통해 구현된 OpenMP 사양의 날짜를 나타내는 정수 리터럴을 계산합니다.

// _OPENMP_dir.cpp
// compile with: /openmp 
#include <stdio.h> 
int main() {
   printf("%d\n", _OPENMP);
}

_VC_NODEFAULTLIB

/Zl을 사용하는 경우 정의됩니다. 자세한 내용은 /Zl(기본 라이브러리 이름 생략)을 참조하십시오.

_WCHAR_T_DEFINED

/Zc:wchar_t를 사용하거나 wchar_t가 프로젝트에 포함된 시스템 헤더 파일에 정의되어 있는 경우 정의됩니다.

_WIN32

Win32 및 Win64의 응용 프로그램에서 사용되는 매크로입니다. 항상 정의되어 있습니다.

_WIN64

Win64의 응용 프로그램에서 사용되는 매크로입니다.

참고 항목

참조

매크로 (C/C++)

전처리 연산자

전처리기 지시문