【发布时间】:2019-08-08 02:06:06
【问题描述】:
假设我在代码中的多个位置有以下构造,并希望使我的代码更清晰:
#if HAVE_LIBFOOBAR
foobar_func(data);
#endif
我正在考虑围绕它编写一个函数样式的宏,它可以处理条件,使代码中的出现看起来像一个常规的函数调用:
foobar_func_if_available(data)
如果条件为真,这将被替换为对实际函数的调用,否则它将是空操作。
因此,类似于:
#if HAVE_LIBFOOBAR
#define foobar_func_if_available(x) foobar_func(x)
#else
#define foobar_func_if_available(x) {}
#endif
问题:
-
{}是否作为空操作工作?它不会产生意外的影响(例如在不带括号的if语句中使用)吗?如果没有,我会用什么? - 我是否必须将两个独立的
#defines 包裹在条件句中,或者是否有办法反过来(一个#define带有函数样式宏中的条件句)?
编辑:有人建议这是 another question 的副本,但我认为不是:另一个问题是“这个构造解决了什么问题”,我的是“什么构造将解决我的问题”。确实,另一个问题有可能解决我的问题,但它并没有涵盖我问题的所有方面。
【问题讨论】:
标签: c c-preprocessor