visual c++中预定义的宏
一、主要目标
(由于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)
}
4. _WIN32、_WIN64
vc中定义的宏。用于说明应用程序是基于win32或是win64平台的。
5. _DEBUG
vc中定义的宏。含义很明显,用于标识当前程序是调试版本。
之所以单独拿出来是因为 _DEBUG和DEBUG两个宏经常混在一起,很容易让人误解到底该使用哪一个。
按照msdn上介绍和说明,几乎多数资料都只有_DEBUG宏,这也是assert、TRACE等生效必须定义的宏。
那么DEBUG这个宏是从哪里来的呢? MFC程序里面通常会用DEBUG宏定义。你可以随便找个mfc项目中的源代码文件,输入#ifdef DEBUG,然后转到定义看看其实现。在atldef.h中,会看到如下定义:
#ifdef _DEBUG
#ifndef DEBUG
#define DEBUG
#endif
#endif
这样就是比较显然了。是mfc中预定义的宏,个人感觉像是防止用户误使用。
因此,在实际编码中应该使用_DEBUG宏,不要使用DEBUG(即使已经定义了)。
visual c++中预定义的宏的更多相关文章
- gcc中预定义的宏__GNUC__
转载:gcc中预定义的宏__GNUC__ - Cccarl - 博客园 (cnblogs.com) 今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以 ...
- ARM编译器中预定义的宏
arm系列目前支持三大主流的工具链,realview的armcc,iar ewarm的iccarm,gnu的gcc,编译器在编译的时候会预定义一些宏,这些宏在工程中起到不可或缺的作用. 例如 /* d ...
- C++中预定义的宏
以下信息摘自与标准C++的文档中. 如果把这些宏加在程序的日志中,它将为开发人员进行问题分析提供了很好的帮助. standard c++ 1998版The following macro names ...
- VS2013 预定义的宏
Visual Studio 2013 预定义的宏 https://msdn.microsoft.com/zh-cn/library/b0084kay(v=vs.120).aspx 列出预定义的 ANS ...
- C标准中一些预定义的宏
C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏(双下滑线) 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串文字) __ ...
- C标准中一些预定义的宏,如__FILE__,__func__等
C标准中一些预定义的宏 C标准中指定了一些预定义的宏,对于编程经常会用到.下面这个表中就是一些常常用到的预定义宏. 宏 意义 __DATE__ 进行预处理的日期(“Mmm dd yyyy”形式的字符串 ...
- 2019-8-31-dotnet-新项目格式与对应框架预定义的宏
title author date CreateTime categories dotnet 新项目格式与对应框架预定义的宏 lindexi 2019-08-31 16:55:58 +0800 201 ...
- dotnet 新项目格式与对应框架预定义的宏
在 sdk style 的项目格式支持使用多框架开发,此时需要在代码里面通过宏判断,在编译的时候执行不同的代码.本文告诉大家在框架里面对应的预定义的条件编译符有哪些 在让一个 csproj 项目指定多 ...
- 五个在XML文档中预定义好的实体
下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 ' ' 单引号 " " 双引号 实体 ...
随机推荐
- webservice(pers)
1. Java远程方法调用 Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接 ...
- iOS 对 HTTPS 证书链的验证
HTTPS从最终的数据解析的角度,与HTTP相同.HTTPS将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全:而对于接收端,在SSL/TSL ...
- 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
模块图片,4位共阳极数码管. 我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管: C 代码如下: #include <wiringPi.h> #include < ...
- HDU 4302 Holedox Eating (STL + 模拟)
Holedox Eating Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Event事件的兼容性(转)
window.event问题问题说明:window.event 只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用.解决方法:在事件发生的函数上 ...
- 【Linux】字符转换命令paste
这个 paste 就要比join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就直接『将两行贴在一起,且中间以 [tab] 键隔开』而已!简单的使用方法: [root@w ...
- UAT测试后上线出现问题的引起的思考
最近公司有一个外部项目上线了,虽然我没有参与这个项目,仅仅只是作为一个旁观者,但是关于用户的UAT测试的问题,不得表达下我的看法, 在上线之前进行了近一个月的UAT测试,测试完成后进入了正式上线阶段. ...
- c# 中内部类的简单介绍 C#内部类
最近在看java一方面的书籍,看到一个很奇怪的问题,java类中还可以再定义一个类,这种结构非常特殊!后来才发现我知识浅薄了,原来C#中也有内部类,之前都一直没有注意过这个语法结构! 使用内部类有这样 ...
- numpy 的通用函数
1 CSV文件 CSV,Comma Separate Values,是逗号分隔文件的缩写,是一种存储数据的纯文本格式,通常用于存储电子表格或数据库软件 特点 每条记录占一行 以逗号为分隔符 逗号前后的 ...
- numpy 切片
numpy 中的切片与数组中的切片类似. 数组 [ 起始:终止:步长, 起始:终止:步长, ... ] 所有的切片操作(无论是步长为+的正序,还是步长为 - 的逆序)都是开始位置包含,结束位置不包含( ...