The compiler recognizes seven predefined ANSI C macros (see Table 1.1), and the Microsoft C++ implementation provides several more (see Table 1.2). These macros take no arguments and cannot be redefined. Their value (except for __LINE__ and __FILE__) must be constant throughout compilation. Some of the predefined macros listed below are defined with multiple values. Their values can be set by selecting the corresponding menu option in the Visual C++ development environment, or by using a command-line switch. See the tables below for more information.
Table 1.1 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.
__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 /EP or /P compiler options.
__LINE__
The line number in the current source file. The line number is a decimal integer constant. It can be altered with a #line directive.
__STDC__
Indicates full conformance with the ANSI C standard. Defined as the integer constant 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.
Table 1.2 Microsoft-Specific Predefined Macros
Macro
Description
_CHAR_UNSIGNED
Default char type is unsigned. Defined when /J is specified.
__cplusplus
Defined for C++ programs only.
_CPPRTTI
Defined for code compiled with /GR (Enable Run-Time Type Information).
_CPPUNWIND
Defined for code compiled with /GX (Enable Exception Handling).
_DLL
Defined when /MD or /MDd (Multithread DLL) is specified.
_M_ALPHA
Defined for DEC ALPHA platforms. It is defined as 1 by the ALPHA compiler, and it is not defined if another compiler is used.
_M_IX86
Defined for x86 processors. See Table 1.3 for more details.
_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).
_MFC_VER
Defines the MFC version. Defined as 0x0600 for Microsoft Foundation Class Library 6.0 or later. Always defined.
_MSC_EXTENSIONS
This macro is defined when compiling with the /Ze compiler option (the default). Its value, when defined, is 1.
_MSC_VER
Defines the compiler version. Defined as 1200 for Microsoft Visual C++ 6.0 or later. Always defined.
_MT
Defined when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified.
_WIN32
Defined for applications for Win32®. Always defined.
As shown in following tables, the compiler generates a value for the preprocessor identifiers that reflect the processor option specified.
Table 1.3 Values for _M_IX86
Option in Development Environment
Command-Line Option
Resulting Value
Blend
/GB
_M_IX86 = 500 (Default. Future compilers will emit a different value to reflect the dominant processor.)