Visual c++ 在Visual C+中是否可以防止删除带有空u VA_ARGS的逗号+;?

Visual c++ 在Visual C+中是否可以防止删除带有空u VA_ARGS的逗号+;?,visual-c++,macros,preprocessor,variadic-macros,Visual C++,Macros,Preprocessor,Variadic Macros,在VisualStudio2005上,我有一个宏,看起来像这样(示例!!): 只要函数至少接受一个参数,我就可以了 当函数接受零参数时,预处理器“有益地”删除“尾随逗号”,展开如下内容: if(prepare(x y)) { funct(); } 太好了,不是吗 我如何修复这个宏,以便它在VisualC++(VS 2005)?< /P>中使用0 显然.什么是x和y-它们是宏参数吗?如果否,预处理器不应将prepare(x,y)修改为prepare(xy)。如果是,它们在哪里?你没有ment

在VisualStudio2005上,我有一个宏,看起来像这样(示例!!):

只要函数至少接受一个参数,我就可以了

当函数接受零参数时,预处理器“有益地”删除“尾随逗号”,展开如下内容:

if(prepare(x y)) { funct(); }
太好了,不是吗

<>我如何修复这个宏,以便它在VisualC++(VS 2005)?< /P>中使用0 <代码>

显然#define MY_CALL(FUN, ...) \ if(prepare(x, y)) { \ int fail[] = {0,} \ FUN(__VA_ARGS__); \ } 使用GCC4.2,在该上下文中允许使用
{0,}
{0}
,因此,如果逗号被删除或不被删除,则无关紧要。然而,我不确定这在规范中是否被普遍接受,这是一个普遍实现的扩展,还是gcc特有的东西


<如果VisualC++中允许<代码> { 0,} /Cord>语法,那么这将有望解决您的问题(假设我正确理解,在代码之前的最新逗号>.

什么是
x
y
-它们是宏参数吗?如果否,预处理器不应将
prepare(x,y)
修改为
prepare(xy)
。如果是,它们在哪里?你没有mention@Ajay:准备是一项正常功能。xy只是这个函数的示例参数。与宏无关。我想知道为什么预处理器会删除x和y之间不相关的逗号。我在marco中为变量参数编写了类似的宏,但我没有遇到这个问题。是的,这些宏也为VS2008和VS2010编译!不,我没有这样的宏。您可以参考这个:它清楚地表明VS2005甚至在SP1中也有这个bug。我在VS2008中编译了它,它很有效。谢谢!我插入了“行”
“dum”,“my”相反,这起作用了。啊哈!那就更好了;P
#define MY_CALL(FUN, ...) \
  if(prepare(x, y)) {     \
    int fail[] = {0,}     \
    FUN(__VA_ARGS__);     \
  }