gpt4 book ai didi

c - 为什么可变参数宏会给我一个错误?

转载 作者:行者123 更新时间:2023-11-30 18:46:12 25 4
gpt4 key购买 nike

鉴于此示例代码:

#define vX(a, ...) ((a)(__VA_ARGS__) ? 1 : 0)

{
int f();
vX(f);
}

我收到错误 C2155:“?”:左操作数无效,预期算术或指针类型

另一方面,如果我向宏提供第二个参数,它会编译 fin - 例如:

vX(f,1)

没问题。我正在使用 msvc 编译器编译 C 代码。

很抱歉打扰大家,但错误在我这边 - 给我错误的两个函数不仅没有参数,而且返回类型也为 void - 这导致了我的问题,而不是任何与宏相关的问题。

最佳答案

来自GCC documentation :

When the macro is invoked, all the tokens in its argument list after the last named argument (this macro has none), including any commas, become the variable argument. This sequence of tokens replaces the identifier __VA_ARGS__ in the macro body wherever it appears.

因此,基本上 __VA_ARGS__ 部分不能为空,这需要 GNU 扩展 (__VA_OPT__)。

关于c - 为什么可变参数宏会给我一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52605789/

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