Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Predefined Macros
Collapse the table of content
Expand the table of content

Predefined Macros

Lists the predefined ANSI/ISO C99 and Microsoft C++ implementation preprocessor macros.

The compiler recognizes predefined ANSI/ISO C99 C preprocessor macros, and the Microsoft C++ implementation provides several more. These preprocessor macros take no arguments and cannot be redefined. Some of the predefined macros listed in this article 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 literal. To ensure that the full path to the file is displayed, use /FC (Full Path of Source Code File in Diagnostics).

__func__

Returns the unqualified and unadorned name of the enclosing function as an array of char.

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__LINE__

The line number in the current source file. The line number is a decimal integer literal. It can be changed with a #line directive.

__STDC__

Indicates conformance with the ANSI/ISO C99 standard. Defined as the integer literal 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

_ATL_VER

Defines the ATL version, encoded as an integer literal.

__AVX__

Defined when /arch:AVX or /arch:AVX2 is specified.

__AVX2__

Defined when /arch:AVX2 is specified.

_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 is an integer literal encoded 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 the integer literal 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
}

__cplusplus_winrt

Defined when you use the /ZW option to compile. The value of __cplusplus_winrt is the integer literal 201009.

__COUNTER__

Expands to an integer literal 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 by using one of the /EH (Exception Handling Model) flags.

_DEBUG

Defined when you compile with /LDd, /MDd, and /MTd.

_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 literal.

__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 literal.

__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 literal.

__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 as an integer literal.

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_AMD64

Defined for compilations that target x64 processors.

_M_ARM

Defined for compilations that target ARM 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 compilations that target x86 processors. This is not defined for x64 processors.

_M_ARM_FP

Expands to an integer literal value indicating which /arch compiler option was used:

  • In the range 30-39 if no /arch ARM option was specified, indicating the default architecture for ARM was used (VFPv3).

  • In the range 40-49 if /arch:VFPv4 was used.

  • See /arch (x86) for more information.

_M_IX86_FP

Expands to an integer literal value indicating which /arch compiler option was used:

  • 0 if /arch:IA32 was used.

  • 1 if /arch:SSE was used.

  • 2 if /arch:SSE2, /arch:AVX or /arch:AVX2 was used. This value is the default if /arch was not specified. When /arch:AVX is specified, the macro __AVX__ is also defined. When /arch:AVX2 is specified, __AVX__ and __AVX2__ are also defined.

  • See /arch (x86) for more information.

_M_X64

Defined for compilations that target x64 processors.

_MANAGED

Defined to be 1 when /clr is specified.

_MFC_VER

Defines the MFC version, encoded as an integer literal.

_MSC_BUILD

Evaluates to an integer literal that contains 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 an integer literal that encodes 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 an integer literal that encodes 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 _MSC_VER macro evaluates to 1700. Type cl /? at the command line to view the compiler's version number.

__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 literal 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.

Show:
© 2015 Microsoft