-
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. To ensure that the full path to the file is displayed, use /FC (Full Path of Source Code File in Diagnostics).
__LINE__
The line number in the current source file. The line number is a decimal integer constant. It can be changed 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, expresabbreviated day of the week and Date is an integer from 1 to 31.
Macro
Description
_ATL_VER
Defines the ATL version.
In Visual Studio 2010, _ATL_VER is defined as 0x0A00.
_CHAR_UNSIGNED
Default char type is unsigned. Defined when /J is specified.
__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,
M is the major version of the runtime
mm is the minor version of the runtime
bbbbb is the build number.
// 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 /clr:safe. Value of __cplusplus_cli is 200406. __cplusplus_cli is in effect throughout the translation unit.
// 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 }
__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. __COUNTER__ remembers its state when you use precompiled headers.
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.
// initialize object with a read-only unique ID exampleClass::exampleClass(int nID) { m_nID = nID; } int exampleClass::GetID() { return m_nID; }
In main, the application declares three objects of type exampleClass, using __COUNTER__ as the unique identifier parameter.
// 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 /GR (Enable Run-Time Type Information).
_CPPUNWIND
Defined for code compiled with /GX (Enable Exception Handling).
_DEBUG
_DLL
Defined when /MD or /MDd (Multithreaded DLL) is specified.
__FUNCDNAME__
Valid only in a function. Defines the decorated name of the enclosing function as a string.
__FUNCDNAME__ is not expanded if you use the /EP or /P compiler option.
The following example uses the __FUNCDNAME__, __FUNCSIG__, and __FUNCTION__ macros to display function information.
// 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 /EP or /P compiler option.
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 /EP or /P compiler option.
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, /clr:safe, for example).
_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_IX86_FP
Expands to a value indicating which /arch compiler option was used:
0 if /arch was not used.
1 if /arch:SSE was used.
2 if /arch:SSE2 was used.
See /arch (Minimum CPU Architecture) for more information.
_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 /clr is specified.
_MFC_VER
Defines the MFC version. For example, in Visual Studio 2010, _MFC_VER is defined as 0x0A00.
_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_BUILD macro evaluates to 1.
_MSC_EXTENSIONS
This macro is defined when you compile with the /Ze compiler option (the default). Its value, when defined, is 1.
_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. For example, if the version number of the Visual C++ compiler is 15.00.20706.01, the _MSC_FULL_VER macro evaluates to 150020706. Type cl /? at the command line to view the compiler's version number.
_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 15.00.20706.01, the _MSC_VER macro evaluates to 1500.
In Visual Studio 2010, _MSC_VER is defined as 1600.
__MSVC_RUNTIME_CHECKS
Defined when one of the /RTC compiler options is specified.
_MT
Defined when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified.
_NATIVE_WCHAR_T_DEFINED
Defined when /Zc:wchar_t is used.
_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 /Zl (Omit Default Library Name) for more information.
_WCHAR_T_DEFINED
Defined when /Zc:wchar_t is used or if wchar_t is defined in a system header file included in your project.
_WIN32
Defined for applications for Win32 and Win64. Always defined.
_WIN64
Defined for applications for Win64.
_Wp64
Defined when specifying /Wp64.
Values for _M_IX86
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
/G4
_M_IX86 = 400