【问题标题】:macro variadic and empty macro variadic宏变量和空宏变量
【发布时间】:2018-12-07 09:02:04
【问题描述】:

我知道这是无效的

#define MACRO(x, ...) __VA_ARGS__
MACRO(5); // VA ARGS is empty, so is not good

但是,这有效吗?

#define MACRO(x, ...)
MACRO(5);

在 Wandbox 上,clang 给了我一个警告,gcc 没有,而在我的计算机上 MSVC 也没有。

【问题讨论】:

  • 为什么不呢?你有tried compiling this吗?
  • 我编辑了我的问题。我编译了:wandbox.org/permlink/8saJeC30jcHrAa0a 它确实编译了,但是,使用-pedantic 选项,我只会在 clang 上收到警告
  • 好吧,我没有-(-1)-ed 你,但是-clang 正在给你答案。
  • @einpoklum 问题是 gcc 没有给我任何警告,msvc 也没有...这就是为什么我想知道它是否有效或者我是否必须等待__VA_OPT__

标签: c++ c++11 c-preprocessor


【解决方案1】:

在 godbolt.org 上使用 GCC(从 5.1 版到最新的 8.2 版)进行测试时,这会导致 -pedantic-errors 选项出错。

<source>:5:8: error: ISO C++11 requires at least one argument for the "..." in a variadic macro
 MACRO(5)

here

您必须等待 __VA_OPT__(可从 C++2a 获得)才能执行您想要执行的操作。

【讨论】:

  • 好的...在 Wandbox gcc 9.0 上什么也没说...谢谢!*
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 2015-02-16
  • 2020-06-08
  • 2023-03-20
相关资源
最近更新 更多