如何定义调试用的DEBUG打印宏

来源:互联网 发布:片头片尾制作软件 编辑:程序博客网 时间:2024/06/06 08:54

如何定义调试用的DEBUG打印宏 【原创】

 

 

在写代码的时候,非常有必要加一些DEBUG的打印信息,但是在release版本中,可以把这些打印信息去掉能缩减代码量。

 

因此,我们需要定义一个打印的DEBUG宏,当此宏未定义时,该打印实现为空。

 

如下:

 

 

#define __DEBUG_PRINT__

 

 

 

 

#ifdef __DEBUG_PRINT__                                              // 对于DEBUG版本,增加打印信息

 

static int debug_print( fmt, ... ){

       char buf[128] ;

       va_list arg ;

       va_start(arg, fmt)

       vsnprintf( buf , sizeof(buf), fmt, arg);                   // 把可变参数fmt格式化打印到buf缓冲区,类似sprintf的用法

       va_end(arg);

 

       printf("[DEBUG]  %s /n", buf );                             //把buf打印出来

};

 

#define  DEBUG_PRINT(_flag, _m , _fmt, ... )    do{    / 

    if(_flag & _m)                                                          /      /* 该打印信息必须要有个FLAG和一个位掩码开关,  */

       debug_print( );                                                           /* 只是一种分级打印或设置打印开关的实现方式而已 */

                                                            /

}while(0)

 

#else

 

#define DEBUG_PRINT(_flag, _m , _fmt , ... )                // 对于RELEASE版本,把__DEBUG_PRINT__宏关闭 

 

#endif

 

 

这里涉及到va_list可变参数的用法

重要的是DEBUG_PRINT这个宏的定义方法(用do_while结构)和 分级打印的思路(使用掩码或者别的FLAG开关等方式)

 

可以由许多许多不同的实现方式。

此方法仅供参考

 

 

 

 

原创粉丝点击