【发布时间】:2018-10-02 09:39:29
【问题描述】:
鉴于此示例代码:
#define vX(a, ...) ((a)(__VA_ARGS__) ? 1 : 0)
{
int f();
vX(f);
}
我收到error C2155: '?': invalid left operand, expected arithmetic or pointer type
另一方面,如果我为宏提供第二个参数,它会编译 fin - 例如:
vX(f,1)
没问题。我正在用 msvc 编译器编译 C 代码。
很抱歉打扰大家,但错误在我这边 - 给我错误的 2 个函数不仅没有参数,而且返回类型也为 void - 这导致了我的问题,而不是任何与宏相关的问题。
【问题讨论】:
-
如果在
{之前添加int main(),它可以在我的Visual Studio 2017 上正常编译。你使用什么版本的VS? -
这是一个相当复杂的问题,这里讨论了一个 gcc 非标准扩展作为解决方案:stackoverflow.com/questions/5891221/…。更多信息和宏诡计:gustedt.wordpress.com/2010/06/08/detect-empty-macro-arguments
-
这个问题缺少一些东西。填写完整程序的最小正确语法,这在 VS 10.0 和 VS 12.0 中编译得很好。当前的答案虽然还可以(您的宏不符合 CPP 的标准),但似乎忽略了您似乎是在使用 MSVS 进行编译的事实(由您收到的错误指示)。
标签: c visual-c++ variadic-macros