博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用宏控制打印
阅读量:4881 次
发布时间:2019-06-11

本文共 746 字,大约阅读时间需要 2 分钟。

在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:

#ifdef DEBUG

 调试代码
#endif

如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef和#endif就很麻烦了。我们可以定义一个DbgPrintf的函 数来专门处理这些事情,只在DbgPrintf函数内放上#ifdef和#endif就行了。但是这样代码在运行时,还是有调用一次函数的,浪费了时间。 那么可不可以利用宏定义,实现完全没有编译代码产生的宏呢?

可以尝试下面的宏代码:

#ifdef DEBUG

#define DbgPrintf printf
#else
#define DbgPrintf /\
/DbgPrintf
#endif

如果DEBUG已经定义了,那么不用说,当然是用printf去代替DbgPrintf了。

下面只分析DEBUG未定义的情形,这个宏定义 实际上是将“DbgPrintf”定义成了“//DbgPrintf”,由于续行符的作用,#define定义时不会发现注释符“//”,但是在展开到代 码之后,就成了注释符“//”了,也就是说,如果你原来的代码是DbgPrintf("%d",x);,经过这个宏展开后成了 //DbgPrintf("%d",x);,相当于自动在前面加了注释符“//”。要注意的是,续行符后面的“/”一定要顶格写,否则就不是“//”了。 另外,这个宏只能单独一行使用,因为它将该行后面的代码都注释掉了。

转载于:https://www.cnblogs.com/no7dw/archive/2012/10/09/2716737.html

你可能感兴趣的文章
【第五天打卡。
查看>>
Maven进价:Maven构建错误汇总
查看>>
Scrapy:Python的爬虫框架【转摘】
查看>>
坚持每天一个小程序(TFTP下载和上传)
查看>>
C# 函数3
查看>>
如何设置水晶报表(crystal reports)的字段自动换行
查看>>
ionic hidden scroll bar
查看>>
Java IO 序列化与反序列化
查看>>
EclEmma安装与使用
查看>>
不能使用联机NuGet 程序包
查看>>
selenium之Javascript定位方式和处理隐藏元素的方法介绍
查看>>
(转)Sql server中 如何用sql语句创建视图
查看>>
WinForms中设置窗体随鼠标移动
查看>>
Eclipse快捷键/快捷操作汇总
查看>>
kubernetes 学习 service相关
查看>>
H3C 广域网连接方式
查看>>
H3C ISDN网络构成
查看>>
python 别名
查看>>
oracle Transactional
查看>>
oracle显示和设置环境变量
查看>>