【发布时间】:2016-05-13 09:22:13
【问题描述】:
我想使用如下宏:
#define x(...) y(a,##__VA_ARGS__,b)
像这样展开:
x(); -> y(a,b);
x(1); -> y(a,1,b);
使用-std=gnu99,它可以完美运行。
然而,使用-std=c99,它看起来像这样:
x(); -> y(a,,b);
x(1); -> y(a,1,b);
## 没有任何区别——它没有吞下逗号。
在 C99 下的其他用法中,例如#define x(a,...) y(a,##__VA_ARGS__),逗号吞咽没问题。
如果有的话,我该怎么做才能在 clang 的 -std=c99 下获得所需的逗号吞咽行为,无论是使用 GNU 扩展 ## 还是通过其他方法?
【问题讨论】:
-
那么这在实现方面是如何工作的(即函数如何使用变量参数)?
-
@trojanfoe 感谢您的评论,但这不在此问题的范围内。 (这不是一个 XY 问题。)
-
@trojanfoe 当然:如果没有参数,我正在使用此宏调用
a(),如果有一个参数,我正在使用此宏调用b(x):GET_MACRO(_0, ##__VA_ARGS__, b, a)(__VA_ARGS__)。
标签: c macros c-preprocessor variadic-macros