宏可变参数和空宏可变参数

时间:2018-12-07 09:02:04

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

我知道这是无效的

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

但是,这有效吗?

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

在Wandbox上,clang会警告我,gcc不会,在我的计算机上MSVC也不会。

1 个答案:

答案 0 :(得分:2)

在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获得)执行您要尝试执行的操作。