Predefined Macros

The Microsoft C/C++ compiler recognizes 10 predefined ANSI C macros, and the Microsoft C++ implementation provides several more. These macros take no arguments and cannot be redefined. Their value, except for __LINE__ and __FILE__, are constant throughout compilation. Some of the predefined macros listed below are defined with multiple values.

ANSI-Compliant Predefined Macros

Macro Description
__DATE__ The compilation date of the current source file. The date is a string literal of the form Mmm dd yyyy
The month name Mmm is the same as for dates generated by the library function asctime declared in TIME.H.
__FILE__ The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks.
__LINE__ The decimal line number in the current source file. It can be altered with a #line directive. 
__STDC__ Indicates full conformance with the ANSI C standard. 
Defined as 1 only if the/Za compiler option is given and you are not compiling C++ code; otherwise is undefined.
__TIME__ The most recent compilation time of the current source file. The time is a string literal of the form hh:mm:ss.
__TIMESTAMP__ The date and time of the last modification of the current source file, expressed as a string literal in the form
Ddd Mmm Date hh:mm:ss yyyy 
where Ddd is the abbreviated day of the week and Date is an integer from 1 to 31.

Microsoft-Specific Predefined Macros

Macro Description
_ATL_VER Defines the ATL version.
_CHAR_UNSIGNED Default char type is unsigned. (Defined when /J is specified).
__COUNTER__ Expands to an integer starting with 0 and incrementing by 1 every time it is used in a compiland.
__cplusplus Defined for C++ programs only.
_CPPLIB_VER Defined if you include any of the Dinkumware C++ Standard Library headers.
Reports which version of the Dinkumware header files are present.
_CPPRTTI Defined for code compiled with (/GR) Enable Run-Time Type Information.
_CPPUNWIND Defined for code compiled with (/GX) Enable Exception Handling.
_DEBUG Defined when compiling with Debug Support (/LDd, /MDd, /MLd, and /MTd).
_DLL Defined when (/MD or /MDd) Multithread DLL is specified.
__FUNCDNAME__ Valid only within a function and returns the decorated name of the enclosing function (as a string). __FUNCDNAME__ is not expanded if you use the /EP or /P compiler option.
__FUNCSIG__ Valid only within a function and returns the signature of the enclosing function (as a string). __FUNCSIG__ is not expanded if you use the /EP or /P compiler option.
__FUNCTION__ Valid only within a function and returns the undecorated name of the enclosing function (as a string). __FUNCTION__ is not expanded if you use the /EP or /P compiler option.
_M_ALPHA Defined to be 1 for DEC ALPHA platforms, else not defined.
_M_IX86 Defined for x86 processors. See Values for _M_IX86 for more details.
_M_IA64 Defined for 64-bit processors.
_M_MPPC Defined for Power Macintosh platforms (no longer supported).
_M_MRX000 Defined for MIPS platforms (no longer supported).
_M_PPC Defined for PowerPC platforms (no longer supported).
_MANAGED Defined to be 1 when .NET platform (/clr) is specified.
_MFC_VER Defines the MFC version. For example, 0x0700 represents MFC version 7.
_MSC_EXTENSIONS This macro is defined to be 1 when compiling with Microsoft Extensions (/Ze) (the default).
_MSC_VER Defines the major and minor versions of the compiler (decimal!). 
For example, 1300 for Microsoft Visual C++ .NET represents version 13.
__MSVC_RUNTIME_CHECKS Defined when one of the Runtime Checks (/RTC) compiler options is specified.
_MT Defined when (/MD or /MDd) Multithreaded DLL or (/MT or /MTd) Multithreaded is specified. 
_WCHAR_T_DEFINED
_NATIVE_WCHAR_T_DEFINED
Defined when wchar_t is defined. Typically, wchar_t is defined when you use /Zc:wchar_t
or when typedef unsigned short wchar_t; is executed in code.
_WIN32 Defined for applications for Win32 and Win64.
_WIN64 Defined for applications for Win64.
_Wp64 Defined when specifying (/Wp64) Portability Diagnostics.

Values for the _M_IX86 Target Processor Option

 
Option in Development Environment Command-Line Option Resulting Value
Blend /GB (default) Current default (2004): _M_IX86 = 600 
Pentium /G5 _M_IX86 = 500
Pentium Pro, Pentium II, and Pentium III /G6 _M_IX86 = 600
80386 /G3 _M_IX86 = 300
80486 /G4 _M_IX86 = 400