8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

MSVC 无法正确扩展 __VA_ARGS__

Tanas 1月前

139 0

考虑以下代码:#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,即

考虑以下代码:

#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__ 它被扩展为一个参数,而不是分解为多个参数。

有什么办法可以解决这个问题吗?

帖子版权声明 1、本帖标题:MSVC 无法正确扩展 __VA_ARGS__
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Tanas在本站《visual-studio》版块原创发布, 转载请注明出处!
最新回复 (0)
  • /Zc:preprocess来解决 or /experimental:preprocessor 。有关详细信息,请参阅 此处 .

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

    #define EXPAND( x ) x
    #define F(x, ...) X = x and VA_ARGS = __VA_ARGS__
    #define G(...) EXPAND( F(__VA_ARGS__) )
    
返回
作者最近主题: