标签:
平时在Linux平台写代码的时候,虽然gdb的调试功能很强大,但很多时候我更喜欢调用系统打印函数来调试我的程序,可是直接调用的话难免显得很愚蠢(中国好像就是不缺愚蠢的coder),除非我需要打印的地方不超过3处,否则我是绝对无法容忍的,可是应该怎么做呢,别急,先去倒杯白开水,然后随便泡点什么,再坐下来一步一步慢慢的整理。
首先要先明确自己的需求,限于是初级篇,所以我设定的需求是:
要满足以上需求,好像没有比宏定义更好的解决方案了,先来看一个GCC风格的:
#define mydebug(format, args...) printf(format, ##args)
如果你并不使用GCC来编译你的C程序,那么可以使用C99风格的方式:
#define mydebug(format, ...) printf(format, ##__VA_ARGS__)
至于用哪一种,我的建议是:虽然GCC风格的可读性更好一点,但毕竟它不是C语言的标准,所以还是用标准风格吧。也许有人会对‘##’有所疑问,其实它的主要作用就是连接前后两个参数,如果后一个参数为空,就会去掉多余的逗号,防止语法上出现错误。
到目前为止上面的宏定义只能满足前两个需求,下面让我们来看看第三个需求,这时就需要用到一些标准预定义宏:
好像函数名相关的宏还有__FUNC__, __FUNCTION__,至于到底用哪一个,我想说的是“标准才是王道”。有了这些宏,剩下的问题就很简单了,现在让我们一次性解决所有的需求,看剑:
#if 1
#define mydebug(format, ...) printf("[%s:%d] "format"", __FILE__, __LINE__, ##__VA_ARGS__)
#else
#define mydebug(format, ...)
#endif
目前这种方式是最初级的定制,应付小规模的调试足够了,如果觉得上面的格式不喜欢,可以尽情的去改成你喜欢的格式,我只是提供了一份模板而已,鉴于本篇的主题,所以不再进行深入的探讨,下一节,我会让我们的打印函数具有等级的概念,还会根据不同的等级输出不同的颜色,敬请期待......
标签:
原文地址:http://www.cnblogs.com/panhongyin/p/5611237.html