C++定义的宏


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 asctimedeclared 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 formhh: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 andDate 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.

C++

// 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.

C++

// 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.

C++

// 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: [email protected]@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.

时间: 2024-11-11 00:14:32

C++定义的宏的相关文章

初级篇第十一期:学习使用常量定义和宏定义

学习建议:自己动手,丰衣足食 学习周期:1周 学习目的:熟练使用常量定义和宏定义 学习答疑:欢迎来技术群里提问并做分享 学习工具:Xcode开发环境 学习内容:熟悉项目开发中常用的两个定义 我们一般定义常量数字和字符串的时候一般会考虑用常量来定义   static CGFloat const kDefaultColorLayerOpacity = 0.4f; 一般定义宏的时候,都是用来定义方法,用宏的时候一定要多注意使用哦,会关系到括号的问题   #define SWH_RGBA(r, g, b

请定义一个宏,比较两个数的a、b的大小,不能使用大于、小于、if语句(转载)

笔试的时候经常问这些: 方法一: #define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a)) 若a>b,则a-b的二进制最高位为0,与上任何数还是0,所以大数为a: 否则,a-b为负数,最高位为1,与上0x80000000(最高位为1其他为0)之后为1,所以此时最大数为b. 方法二: #define max(a,b) ((((a)-(b))&(1<<31))?(b):(a)) 方法三:      1.#define 

Object_C 定义全局宏的颜色时,报“Expected identifier”的错误

在定义全局颜色宏的时候,为了整齐把空格删了,写在了同一行里,调用的时候,出错提示"Expected identifier",如下: 如果宏定义如上那样的话,在调用的时候,会出现如下的问题: 百思不得解,而正确的定义颜色宏的格式如下: 代码如下: #define UIColorFromHEXWithAlpha(rgbValue,a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 g

完美释放实例变量的内存,定义成宏的形式

完美释放内存,麻烦自己方便他人... 定义成宏的形式: #define RELEASE_SAFE(_Pointer) do{[_Pointer release],_Pointer = nil;}while(0)  例: //姓名 @property (nonatomic,copy)NSString *name; //性别 @property (nonatomic,copy)NSString *gender; //年龄 @property (nonatomic,copy)NSString *age

“M_PI_2”: 重复定义的宏

问题警告:“M_PI_2”: 重复定义的宏 分析:在Visual Studio上使用math.h库时与其他库数学库冲突,我们可以通过添加宏定义“_USE_MATH_DEFINES”来消除math.h定义的宏. #if defined _USE_MATH_DEFINES && !defined _MATH_DEFINES_DEFINED #define _MATH_DEFINES_DEFINED // Definitions of useful mathematical constants

C语言宏定义和宏定义函数

要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义.那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍. 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int b)

iOS-简化单例模式(定义成宏 以后通用)

// .h文件 #define HMSingletonH + (instancetype)sharedInstance; // .m文件 #define HMSingletonM static id _instance; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super allocWithZon

iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用

如: // RGB颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] // 获取

定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句 以及 不用 第三个数,交换 a,b的值

无意中 一篇博文,介绍这个问题,引起了我的兴趣. 博文中 介绍了 三种方法: 1. #define max(a,b) ((((a)-(b))&(1<<31))?(b):(a)) 2. #define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a)) 3 #define max(a,b) (((abs((a)-(b)))==((a)-(b)))?(a):(b)) 第一种方法 和第二种方法 的原理都是一样的,就是 根据 (a) -