为什么这个可变参数计数宏失败与VC ++? [英] Why does this variadic argument count macro fail with VC++?

查看:145
本文介绍了为什么这个可变参数计数宏失败与VC ++?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到以下实现来获取可变宏中的参数数量(目前限制为16个args)。然而,对于VS2010,输出总是 1 ,无论传递多少参数。 使用GCC ,输出是正确的,这使我得出结论,我一定错过了特定的MSVC(10) 。

I got the following implementation to get the number of arguments in a variadic macro (currently limited to 16 args). However, for VS2010 the output is always 1, no matter how many arguments are passed. With GCC, the output is correct, bringing me to the conclusion that I must have missed something specific for MSVC (10).

#define PP_NARGS(...) \
    _xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)

#define _xPP_NARGS_IMPL(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N

int main(){
    int i = PP_NARGS(A,V,C,X,Y,Z);

    std::cout << i;

    std::cin.get();
    return 0;
}

所以,问题是作为标题,任何帮助将不胜感激。 / p>

So, question is as the title states, any help would be appreciated.

推荐答案

以下解决方法有帮助吗?

Does the following work-around help?

#define EXPAND(x) x
#define PP_NARGS(...) \
    EXPAND(_xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0))

I认为你的宏特别没有错,但
MSVC的 __ VA_ARGS __ 扩展似乎与C99有所不同。

I think your macro isn't wrong in particular, but MSVC's __VA_ARGS__ expansion seems to behave differently from C99.

这篇关于为什么这个可变参数计数宏失败与VC ++?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆