define DBG_PRINTF(…)

//#define DBG_PRINTF printf - 未注释这行时,进行printf打印;注释后不打印 —— 不知道对不对

  • 使用宏定义来封装一个宏打印函数,这个宏打印函数可以显示打印信息所在的文件、行数、函数名等信息

通常情况下,一些打印调试信息只是在我们调试阶段需要的,在程序发布阶段是不需要的。
所以,为了避免打印调试信息带来的资源开销,我们可以把这些打印调试语句给注释掉。
一种方法是逐句进行注释,这是一种比较低效的方法。比较高效的方法就是添加调试宏开关,利用条件编译来选择打印/不打印调试信息。

  1. # defineDEBUG 1
  2. # if DEBUG
  3. # defineDBG_PRINTF(fmt, args...)
  4. {
  5. printf( "<<File:%s Line:%d Function:%s>> ", __FILE__, __LINE__, __FUNCTION__);
  6. printf(fmt, ##args);
  7. }
  8. # else
  9. #define DBG_PRINTF(fmt, args...)
  10. # endif

#define DEBUG(format, …) printf(format, ##VA_ARGS)

的意思是: 如果可变参数位空,则使预处理器去除前面的那个逗号。
ANSI C 有几个标准的预定义宏,为:
FILE : 当前源代码的文件名。
LINE: 当前源代码的行号。
DATE:当前的编译日期。
TIME:当前的编译时间。