列出预定义的 ANSI C和C++ Microsoft实现宏。
编译器识别预定义的ANSI C宏,并且Microsoft C++实现提供几个更多。
这些宏不带参数,并且不能重定义。
下面列出的某些预定义的宏定义与多个值。
请参见下表。有关更多信息。
ANSI兼容的预定义宏
用于源文件的源文件或包含的标头时,扩展为从0开始并提高x 1的整数。
当您使用预编译标头时,
__COUNTER__
确保其状态。
下面的示例使用
__COUNTER__ 分配唯一标识符到同一类型的三个不同的对象。
首先,假定下面的类定义。
构造函数采用整数作为参数。
// initialize object with a read-only unique ID
exampleClass::exampleClass(int nID)
m_nID = nID;
int exampleClass::GetID()
return m_nID;
// 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;
// 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)
仅在函数中有效。定义封闭函数的签名为字符串。
如果您使用的是,/EP 或 /P 编译器选项,__FUNCSIG__ 不展开。
默认情况下在64位操作系统上,调用约定是 __cdecl。
有关示例,请参见 __FUNCDNAME__。
计算为编译器的主版本号和次版本号元素。专业数字为句点分隔的版本号的第一个元素,并且该次版本号是第二个元素。
例如,因此,如果Visual C++编译器的版本号为15.00.20706.01,_MSC_VER 宏计算结果为1500。
在 Visual Studio 2010中,_MSC_VER 定义为1600。