宏可变参数和空宏可变参数
macro variadic and empty macro variadic
我知道这是无效的
#define MACRO(x, ...) __VA_ARGS__
MACRO(5); // VA ARGS is empty, so is not good
但是,这有效吗?
#define MACRO(x, ...)
MACRO(5);
在 Wandbox 上,clang 会给我一个警告,gcc 不会,而在我的计算机上 MSVC 也不会。
在 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 获得)执行您正在尝试执行的操作。
我知道这是无效的
#define MACRO(x, ...) __VA_ARGS__
MACRO(5); // VA ARGS is empty, so is not good
但是,这有效吗?
#define MACRO(x, ...)
MACRO(5);
在 Wandbox 上,clang 会给我一个警告,gcc 不会,而在我的计算机上 MSVC 也不会。
在 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 获得)执行您正在尝试执行的操作。