公司代码如何设定debug:在开发的时候需要打印信息,但代码完成后,应该把不重要的信息都停止打印;这样的话,需要把打印分种类,stdout || stderr等等
在公司代码里看到这样:
//#undef DEBUG_PRINTF //不打印输出 ,默认情况
#define DEBUG_PRINTF //我改的,为了打印
#if defined(AOM_DAEMON) //功能需要
#define GET_MILLISEC get_milliseconds()
#else
#define GET_MILLISEC 0LL
#endif
#if NO_DEBUG
# define _TRACE_DBG(f, ...) do {} while(0) //普通debug就不要打了
# define _TRACE_ERR(f, ...) do { syslog(LOG_LOCAL1 | LOG_ERR, "%lld: %s: "f, GET_MILLISEC, __FILE__, __VA_ARGS__);} while(0) //error直接入库
#else
# ifdef DEBUG_PRINTF //如果开启debug模式,可以选择直接打印
# define _TRACE_ERR(f, ...) fprintf(stderr, "%lld: %s: "f, GET_MILLISEC, __FILE__, __VA_ARGS__)
# define _TRACE_DBG(f, ...) fprintf(stdout, "%lld: %s: "f, GET_MILLISEC, __FILE__, __VA_ARGS__)
# else
# define _TRACE_ERR(f, ...) syslog(LOG_LOCAL1 | LOG_ERR, "%s: "f, __FILE__, __VA_ARGS__)
# define _TRACE_DBG(f, ...) syslog(LOG_LOCAL1 | LOG_DEBUG, "%s: "f, __FILE__, __VA_ARGS__)
# endif
#endif
问题:宏定义为什么要这样写??为什么要用 do {} while(0)????
#define _TRACE_GPIO(f, ...) do {if (aom_trace_gpio)_TRACE_ERR(f,__VA_ARGS__); else _TRACE_DBG(f,__VA_ARGS__);}while(0)
get:__FILE__ ,__VA_ARGS__(以上面的为例,把扩展的参数直接传入后面的执行函数体里)
|