对于调试构建,我通常使用 Clang,因为它可以更好地格式化警告和错误,并且更容易跟踪和修复它们。
但是最近在添加了一个带有可变参数的宏之后,Clang 告诉我以下内容(来自一个虚拟项目):
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
我知道macroname(args...)
在各种编译器中都能很好地编译,包括 Visualstudio、Sunstudio,当然还有 GCC。但为了确保 clang 是正确的,我尝试了另外两种扩展可变参数的方法:
1号:
#define stuff1(...) stuff_i(...)
2号:
#define stuff2(...) stuff_i(__VA_ARGS__)
在这两个我收到此消息:
main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
...这让我想知道可变参数宏是否实际上是 C++ 标准的一部分(当然我知道预处理器是独立解释的)?