在通过宏定义控制日志是否启用时使用了如下程序:
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
|