一、主要目标

(由于visual studio通常包含很多开发环境,通常将其中c/c++的ide称为visual c++ 20xx)

整理下visual c++ 2010下预定义的宏。做一下备忘和了解,在实际编码中可以考虑使用部分宏作为判断标准。

主要参考链接:http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.100).aspx

 

二、vc++ 2010中预定义宏

 注意本文中提及的所有预定义宏都是无参数的,并且不能重定义。

1. __FILE__、__LINE__

这两个预定义宏是c语言中定义的,主要用于标识代码段所在的源文件名称(全路径或者文件名)以及当前位置在源文件中的行数。多用于错误跟踪、预编译报错、程序异常跟踪等,比如TRACE、ASSERT失败的提示信息。

 

2. _CHAR_UNSIGNED

vc中附加定义的宏。主要用于说明char类型的数据,是有符号的还是无符号的。默认情况下char是无符号的。

在很多开源项目里面,使用cl或gcc编译源码时可能需要关注下char的正负:因为有符号的char在做数值运行遇到类型提升的情况可能会存在不确定性的行为(跟编译器的实现有关)。

 

3. __FUNCDNAME__、__FUNCSIG__、__FUNCTION__ 

vc中定义的宏。仅在函数实现中使用有效。三个宏分别表示:编译器修饰后的函数名称、函数签名、代码中的函数名称。

实际使用可参考下列代码:

void exampleFunction()
{
    printf("Function name: %s\n", __FUNCTION__);
    printf("Decorated function name: %s\n", __FUNCDNAME__);
    printf("Function signature: %s\n", __FUNCSIG__);
    
    // vc++ 2010的实际输出 
    // -------------------------------------------------
    // Function name: exampleFunction
    // Decorated function name: ?exampleFunction@@YAXXZ
    // Function signature: void __cdecl exampleFunction(void)
}
View Code

相关文章: