project_icrane

icrane项目中学到的小知识点

一 c++中 DEBUG宏定义

使用宏定义可以方便的更改打印方式和格式。比如在qt中开发一段代码,之后可能移植到非qt环境中。可以使用以下方式:

#define __CDEBUG__ 0    //使用标准的printf()打印函数
#define __QDEBUG__ 1    //使用QT的qDebug()函数
#if __CDEBUG__
#define DEBUG(format,...) printf("FILE: " __FILE__", LINE: %04d: " format"\n", __LINE__, ##__VA_ARGS__)
#elif __QDEBUG__
#include 
#define DEBUG(format,...) qDebug("FILE: " __FILE__", LINE: %04d: " format"\n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG(format,...)
#endif

当QDEBUG为1时,DEBUG使用qt的qDebug()函数;当CDEBUG为1时,DEBUG使用c的printf()函数。
注意:在c++11编译器中,当字符串跟变量连接的时候,必须增加一个空格。

除此之外,有些信息只在调试过程中需要打印,正式发布时不需要;有些信息在正式发布以后也需要打印。因此可以定义DEBUG用于调试,PRINTF用于正式发布,如:

/*--调试时使用的打印方式--*/
#define __CDEBUG__ 0    //使用标准的printf()打印函数
#define __QDEBUG__ 1    //使用QT的qDebug()函数
#if __CDEBUG__
#define DEBUG(format,...) printf("FILE: " __FILE__", LINE: %04d: " format"\n", __LINE__, ##__VA_ARGS__)
#elif __QDEBUG__
#include 
#define DEBUG(format,...) qDebug("FILE: " __FILE__", LINE: %04d: " format"\n", __LINE__, ##__VA_ARGS__)
#else
#define DEBUG(format,...)
#endif

/*--运行时使用的打印方式--*/
#define __CPRINTF__ 0   //使用标准的printf()打印函数
#define __QPRINTF__ 1   //使用QT的qDebug()函数
#if __CPRINTF__
#define PRINTF(format,...) printf("FILE: " __FILE__ format"\n", ##__VA_ARGS__)
#elif __QPRINTF__
#include 
#define PRINTF(format,...) qDebug("FILE: " __FILE__ format"\n", ##__VA_ARGS__)
#else
#define PRINTF(format,...)
#endif

你可能感兴趣的:(project_icrane)