考虑这段代码:
#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/