visual-c++ - MSVC 未正确扩展 __VA_ARGS__

标签 visual-c++ c-preprocessor variadic-macros

考虑这段代码:

#define F(x, ...) X = x and VA_ARGS = __VA_ARGS__
#define G(...) F(__VA_ARGS__)
F(1, 2, 3)
G(1, 2, 3)

这两个宏的预期输出为 X = 1 和 VA_ARGS = 2, 3,这就是我使用 GCC 得到的结果,但是,MSVC 将其扩展为:

X = 1 and VA_ARGS = 2, 3
X = 1, 2, 3 and VA_ARGS =

也就是说,__VA_ARGS__ 被扩展为单个参数,而不是分解为多个参数。

有办法解决这个问题吗?

最佳答案

编辑: 此问题可以通过使用来解决 最近的 MSVC 中的 /Zc:preprocessor/experimental:preprocessor 选项。 详情请参阅 here .

MSVC 的预处理器似乎与标准的行为有很大不同 规范。
也许以下解决方法会有所帮助:

#define EXPAND( x ) x
#define F(x, ...) X = x and VA_ARGS = __VA_ARGS__
#define G(...) EXPAND( F(__VA_ARGS__) )

关于visual-c++ - MSVC 未正确扩展 __VA_ARGS__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134523/

相关文章:

c++ - 有没有新的 _malloca 等价物

c++ - #pragma 警告 - 文件特定?

C 预处理器指令运算符##

c++ - C/C++ 预处理器 : extract every second variadic parameter

c - GCC##__VA_ARGS__ 技巧的标准替代方案?

c++ - 在现有项目中创建 CPPUnit 测试需要哪些 .cpp 和 .h 文件?

C++ 包含混淆

iOS 错误预期 ')'

c++ - 使用 gcc 和 clang 的可变宏扩展的奇怪行为

c++ - 从 Intellisense 和/或某些 "clients"隐藏类的方法?