利用宏控制打印
在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:1
2
3
调试代码
如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef
和#endif
就很麻烦了。我们可以定义一个DbgPrintf
的函 数来专门处理这些事情,只在DbgPrintf
函数内放上#ifdef
和#endif
就行了。但是这样代码在运行时,还是有调用一次函数的,浪费了时间。 那么可不可以利用宏定义,实现完全没有编译代码产生的宏呢?
可以尝试下面的宏代码:1
2
3
4
5
6
7//#define MYDEBUG
/DbgPrintf
如果MYDEBUG
已经定义了,则用printf
去代替DbgPrintf
了。
如果MYDEBUG
未定义的情形,这个宏定义实际上是将DbgPrintf
定义成了//DbgPrintf
,由于续行符的作用,#define
定义时不会发现注释符//
,但是在展开到代码之后,就成了注释符//
了,也就是说,如果你原来的代码是DbgPrintf("%d",x)
;,经过这个宏展开后成了//DbgPrintf("%d",x)
,相当于自动在前面加了注释符//
。
注意:
- 续行符后面的
/
一定要顶格写,否则就不是//
了。 - 另外,这个宏只能单独一行使用,因为它将该行后面的代码都注释掉了。
打印信息的同时输出位置
通过logI
输出一些程序运行信息,可以借助logInfo
控制是否打印,对于警告和错误,分别通过logW
和logE
输出。1
2
3
4
5
6
7
8
9
10
/logI