0
我有一个调试安装程序,你在Makefile中设置了各种调试标志,然后在每个源文件有:C预处理器 - 定义宏的不同取决于另一个宏
#ifdef DEBUG_FLAG
# define DEBUGGING(...) Something(__VA_ARGS__)
#else
# define DEBUGGING(...) do {} while(0)
#endif
我想提出这个更简洁由具有源文件这样说:
#define DEBUGGING(...) DEBUG_HELP(DEBUG_FLAG, Something(__VA_ARGS__))
其中DEBUG_HELP
是在报头中定义,具有相同的最终结果使用DEBUGGING
宏会引起Something
,即被调用,仅当DEBUG_FLAG
被定义为非零。如果DEBUG_FLAG
根本没有定义,那么代码仍然应该编译,而不是调用Something
。
这可能吗?
到目前为止我的尝试,我还没有能够找出一种方法,在DEBUG_FLAG
根本没有定义的情况下不会得到编译错误。
是否对DEBUG_HELP的定义方式有限制?它可以用'#ifdef DEBUG_FLAG'条件包装吗? – user694733
也许我错过了这里的东西,但为什么你不能简单地做'#if DEBUG_FLAG #define DEBUGGING(...)Something(__VA_ARGS__) #endif'? – Lundin
[测试预处理符号是否在宏内部定义](https://stackoverflow.com/questions/26099745/test-if-preprocessor-symbol-is-defined-inside-macro) – Groo