【发布时间】:2017-08-25 09:03:14
【问题描述】:
我有一个调试设置,您可以在 makefile 中设置各种调试标志,然后在我们拥有的每个源文件中设置:
#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条件包裹吗? -
也许我在这里遗漏了一些东西,但你为什么不能简单地做
#if DEBUG_FLAG #define DEBUGGING(...) Something(__VA_ARGS__) #endif?
标签: c macros preprocessor