为什么这个可变参数计数宏失败与VC ++? [英] Why does this variadic argument count macro fail with 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屋!