Predefined Macros
Lists the predefined ANSI C and Microsoft C++ implementation macros.
The compiler recognizes predefined ANSI C macros, and the Microsoft C++ implementation provides several more. These macros take no arguments and cannot be redefined. Some of the predefined macros listed in this article are defined with multiple values.
Macro |
Description |
---|---|
__DATE__ |
The compilation date of the current source file. The date is a string literal of the form |
__FILE__ |
The name of the current source file. __FILE__ expands to a string surrounded by double quotation marks. To ensure that the full path to the file is displayed, use |
__LINE__ |
The line number in the current source file. The line number is a decimal integer constant. It can be changed with a |
__STDC__ |
Indicates full conformance with the ANSI C standard. Defined as the integer constant 1 only if the |
__TIME__ |
The most recent compilation time of the current source file. The time is a string literal of the form |
__TIMESTAMP__ |
The date and time of the last modification of the current source file, expressed as a string literal in the form |
Macro |
Description |
---|---|
_ATL_VER |
Defines the ATL version. In Visual Studio 2012, _ATL_VER is defined as 0x0B00. |
_CHAR_UNSIGNED |
Default char type is unsigned. Defined when |
__CLR_VER |
Defines the version of the common language runtime used when the application was compiled. The value returned will be in the following format: Mmmbbbbb where,
// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); } |
__cplusplus_cli |
Defined when you compile with /clr, /clr:pure, or // 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 |
Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is 201009. |
__COUNTER__ |
Expands to an integer starting with 0 and incrementing by 1 every time it is used in a source file or included headers of the source file. The following example uses __COUNTER__ to assign unique identifiers to three different objects of the same type. First, assume the following class definition. The constructor takes an integer as a parameter. In main, the application declares three objects of type exampleClass, using // Demonstration of __COUNTER__, assigns unique identifiers to // different objects of the same type int main(int argc, char** argv) { // __COUNTER__ is initially defined as 0 exampleClass e1(__COUNTER__); // having been referenced, __COUNTER__ is now defined as 1 exampleClass e2(__COUNTER__); // __COUNTER__ is now defined as 2 exampleClass e3(__COUNTER__); printf("e1 ID: %i\n", e1.GetID()); printf("e2 ID: %i\n", e2.GetID()); printf("e3 ID: %i\n", e3.GetID()); // Output // ------------------------------ // e1 ID: 0 // e2 ID: 1 // e3 ID: 2 return 0; } |
__cplusplus |
Defined for C++ programs only. |
_CPPRTTI |
Defined for code compiled with |
_CPPUNWIND |
Defined for code compiled by using one of the |
_DEBUG |
|
_DLL |
Defined when |
__FUNCDNAME__ |
Valid only in a function. Defines the __FUNCDNAME__ is not expanded if you use the The following example uses the __FUNCDNAME__, // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros void exampleFunction() { printf("Function name: %s\n", __FUNCTION__); printf("Decorated function name: %s\n", __FUNCDNAME__); printf("Function signature: %s\n", __FUNCSIG__); // Sample Output // ------------------------------------------------- // Function name: exampleFunction // Decorated function name: ?exampleFunction@@YAXXZ // Function signature: void __cdecl exampleFunction(void) } |
__FUNCSIG__ |
Valid only in a function. Defines the signature of the enclosing function as a string. __FUNCSIG__ is not expanded if you use the On a 64-bit operating system, the calling convention is __cdecl by default. See __FUNCDNAME__ for an example. |
__FUNCTION__ |
Valid only in a function. Defines the undecorated name of the enclosing function as a string. __FUNCTION__ is not expanded if you use the See __FUNCDNAME__ for an example. |
_INTEGRAL_MAX_BITS |
Reports the maximum size (in bits) for an integral type. // integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); } |
_M_ALPHA |
Defined for DEC ALPHA platforms (no longer supported). |
_M_AMD64 |
Defined for x64 processors. |
_M_CEE |
Defined for a compilation that uses any form of /clr (/clr:oldSyntax, |
_M_CEE_PURE |
Defined for a compilation that uses /clr:pure. |
_M_CEE_SAFE |
Defined for a compilation that uses /clr:safe. |
_M_IX86 |
Defined for x86 processors. See the Values for _M_IX86 table below for more information. This is not defined for x64 processors. |
_M_IA64 |
Defined for Itanium Processor Family 64-bit processors. |
_M_ARM_FP |
Expands to a value indicating which /arch compiler option was used:
|
_M_IX86_FP |
Expands to a value indicating which /arch compiler option was used:
|
_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). |
_M_X64 |
Defined for x64 processors. |
_MANAGED |
Defined to be 1 when |
_MFC_VER |
Defines the MFC version. For example, in Visual Studio 2012, |
_MSC_BUILD |
Evaluates to the revision number component of the compiler's version number. The revision number is the fourth component of the period-delimited version number. For example, if the version number of the Visual C++ compiler is 15.00.20706.01, the |
_MSC_EXTENSIONS |
This macro is defined when you compile with the |
_MSC_FULL_VER |
Evaluates to the major, minor, and build number components of the compiler's version number. The major number is the first component of the period-delimited version number, the minor number is the second component, and the build number is the third component. |
_MSC_VER |
Evaluates to the major and minor number components of the compiler's version number. The major number is the first component of the period-delimited version number and the minor number is the second component. For example, if the version number of the Visual C++ compiler is 17.00.51106.1, the |
__MSVC_RUNTIME_CHECKS |
Defined when one of the |
_MT |
Defined when |
_NATIVE_WCHAR_T_DEFINED |
Defined when |
_OPENMP |
Defined when compiling with /openmp, returns an integer representing the date of the OpenMP specification implemented by Visual C++. // _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); } |
_VC_NODEFAULTLIB |
Defined when /Zl is used; see |
_WCHAR_T_DEFINED |
Defined when |
_WIN32 |
Defined for applications for Win32 and Win64. Always defined. |
_WIN64 |
Defined for applications for Win64. |
_Wp64 |
Defined when specifying |
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 = 600 (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 |