The compiler recognizes seven 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__, 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 environmen, or by using a command-line switch. See the following tables for more information.
ANSI-Compliant Predefined Macros
Macro | Description |
---|---|
__COUNTER__ | Expands to an integer, starting with 0 and incrementing by one every time it is used in a compiland. __COUNTER__ remembers its state when using precompiled headers. If the last __COUNTER__ value was 4 after building a PCH, it will start with 5 on each PCH use.
__COUNTER__ lets you generate unique variable names. You can use token pasting with a prefix to make a unique name. For example, #include <stdio.h> #define FUNC2(x,y) x##y #define FUNC1(x,y) FUNC2(x,y) #define FUNC(x) FUNC1(x,__COUNTER__) int FUNC(my_unique_prefix); int FUNC(my_unique_prefix); void main() { my_unique_prefix0 = 0; printf("\n%d",my_unique_prefix0); my_unique_prefix0++; printf("\n%d",my_unique_prefix0); } |
__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.
You can create your own wide string version of __FILE__ as follows: #define WIDEN2(x) L ## x #define WIDEN(x) WIDEN2(x) #define __WFILE__ WIDEN(__FILE__) wchar_t *pwsz = __WFILE__; |
__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 /EP or /P compiler options. |
__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. |
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 Values for _M_IX86 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_FULL_VER | Defines the full version number for the compiler (cl.exe). _MSC_FULL_VER allows you to put conditional statements in your code that are based on which version of the compiler is being used.
Version number is in the format MajorMinorBuild.
If you type cl /? at the command line, you will see the full version for the compiler you are using. For example, in Visual C++ 6.0, the version number is 12.00.8168. |
_MSC_VER | Defines the major and minor versions of the compiler. For example, 1200 for Microsoft Visual C++ 6.0. 1200 represents version 12 and no point release. This represents the fact that there have been a total of 12 releases of the compiler.
If you type cl /? at the command line, you will see the full version for the compiler you are using. |
_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 table, the compiler generates a value for the preprocessor identifiers that reflect the processor option specified.
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.) |
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 |