在通过宏定义控制日志是否启用时使用了如下程序:

1
2
3
4
5
6
7
#define DEBUG_LOG TRUE

#ifdef DEBUG_LOG && (DEBUG_LOG == TRUE)
#define gh_debug_log(format, ...) printf("[%s Line:%d]: "format"\r\n", __FILE__, __LINE__, ##__VA_ARGS__)
#else
#define gh_debug_log(format, ...)
#endif

在编译时出现了extra tokens at end of #ifdef directive的警告。原来,这是因为C语言在处理#ifdef时,只会检查最近的关键字,后续的则会被认为是多余的字符。

根据本文的实际应用场景,即判断DEBUG_LOG有定义且其值为TRUE是否成立,上述程序应修改为:

1
2
3
4
5
6
7
#define DEBUG_LOG TRUE

#if (defined DEBUG_LOG) && (DEBUG_LOG == TRUE)
#define gh_debug_log(format, ...) printf("[%s Line:%d]: "format"\r\n", __FILE__, __LINE__, ##__VA_ARGS__)
#else
#define gh_debug_log(format, ...)
#endif