如何定义调试用的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开关等方式)
可以由许多许多不同的实现方式。
此方法仅供参考