这天看一个朋友写的程序,第一眼看去感觉非常乱,仔细一看发现其实还是有点玄机在里面,为什么会那么乱是因为他在里面加入了调试信息,全都是打印的log。其实那样写有不少好处,可以很方便的注释掉调试代码。
现在分享下它的那种方法
#define DEBUG
/* 其他代码 */
..........
..........
/* 调试代码 */
#ifdef DEBUG
printf(".........../n");
#endif
这样写有一个好处就是如果我不要调试的时候把#define DEBUG注释了就完了,同时也能很容易的加入其他非输出语句方式的调试代码。不过缺点也不少,我们需要每次写调试信息的时候都加入#ifdef.........#endif,这都还好,大不了多谢点代码麻,关键的问题在于代码看上去很乱,代码不易维护,如果会排版或许会好点。
然后分享下第二种,个人比较喜欢这种,能少些代码,也能让代码美观:
#define DEBUG
#define XX_DEBUG
/* 调试宏定义 */
#ifdef DEBUG
# ifdef XX_DEBUG
# define PRINTF(fmt, args...) printf(fmt, ##args)
# else
# define PRINTF(fmt, args...) fprintf(stderr, fmt, ##args)
# endif
#else
# define PRINTF(fmt, args...) /* 什么事情也不做 */
#endif
/* 调试代码 */
PRINTF("%d/n", X);
.........
.........
如果不需要调试信息的时候把#define DEBUG注释了就行了。
这种方式的调试就不会在代码中出现#ifdef..........#endif一类语句了,代码就不会太乱了,同时也达到了调试了效果,只是这种方法也有个很明显的缺点,我不能加入除PRINTF以外的调试代码,即使能还得又在前面定义一堆宏。
我知道的就这两种了,如果还有其他的好方法请大家分享。谢谢..