可变参数宏----调试工具

    写代码免不了要调试,但是c的标准输出函数printf,似乎并不能满足我们需要。如果需要不需要调试了,就需要讲printf函数一条一条的删除,很是麻烦,身为一个合格的程序猿,肯定是懒惰,因为我们的口号是:可以代码自己解决的,就不要手动。所以,我们就学习一下可变参数宏,来实现调试工具。

    首先看一下我们是怎么实现的。

    #ifdef _DEBUG

    #define DRV_DEBUG(deb, fmt, ...)  \
                        do{\
                                  if(deb == 1) \
                                  {\
                                         printf("EOW_DEBUG:
%d@%s,  "fmt" /n " __LINE__, __FILE__, ##__VA_ARGS__);\
                                  }\
                            }while(0)

     #else

     #define  DRV_DEBUG(deb,fmt, ...)

     #endif
     注:' ## '的意思是,如果可变参数被忽略或为空,将使预处理器去除掉它前面的那个逗号。 

     #define宏定义就无需多说了吧;

     其中的参数deb的作用就很明显了,他就是调试开关,你也可以把它设置成一个全局变量,然后通过命令行,当然你的设备有命令行,通过一个命令就可以打开或者关闭调试工具。无需重新重新编译。

    其他的参数,就是printf中参数。无需多说。

 

后续:

     介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。

ANSI C标准中有几个标准预定义宏(也是常用的):

__LINE__:在源代码中插入当前源代码行号;

__FILE__:在源文件中插入当前源文件名;

__DATE__:在源文件中插入当前的编译日期

__TIME__:在源文件中插入当前编译时间;

__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

__cplusplus:当编写C++程序时该标识符被定义。

编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/42459629
今日推荐