gpt4 book ai didi

c - 如果条件为假,则无操作的函数式宏

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:05 25 4
gpt4 key购买 nike

假设我在我的代码中的多个地方有以下构造并且想让我的代码更易读:

#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 语句中使用)吗?如果没有,我会用什么?
  • 我是否必须有两个独立的 #define 包裹在条件中,或者有没有办法反过来做(一个 #define 有条件在函数式宏中)?

编辑:有人建议这是 another question 的副本,但在我看来它不是:另一个问题问“这个构造解决了什么问题”,我的是“什么构造将解决我的问题”。事实上,另一个问题对我的问题有可能的解决方案,它并没有涵盖我问题的所有方面。

最佳答案

创建一个虚拟函数并使#define 指向它(有条件地):


#if HAVE_LIBFOOBAR
#define foobar_func_if_available(x) foobar_func(x)
#else
int dummy(int ignored)
{
return 0;
}
#define foobar_func_if_available(x) dummy(x)
#endif

或者只是:

#define foobar_func_if_available(x) 0

关于c - 如果条件为假,则无操作的函数式宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com