考虑以下代码:
#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 and VA_ARGS = 2, 3
,我使用GCC得到了这个结果,然而,MSVC将其展开为:
X = 1 and VA_ARGS = 2, 3
X = 1, 2, 3 and VA_ARGS =
也就是说,__VA_ARGS__
被扩展为一个单独的参数,而不是分解为多个参数。
有什么解决方法吗?
__VA_ARGS__
是1, 2
。EXPAND(x) x
将F(__VA_ARGS__)
替换为字面上的F(1, 2)
,这样F(1, 2)
会被处理,而不是处理F(__VA_ARGS__)
,因为__VA_ARGS__
被视为一个单一实体。 - solstice333/Zc:preprocessor
,请参见此处,它将正确展开__VA_ARGS__
。也许值得编辑您的答案,以包括这个解决方案和您原来的解决方案? - hassec