gpt4 book ai didi

visual-c++ - 是否可以防止在 Visual C++ 中删除带有空 __VA_ARGS__ 的逗号?

转载 作者:行者123 更新时间:2023-12-04 06:42:51 25 4
gpt4 key购买 nike

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

#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
FUN(__VA_ARGS__); \
}
/**/

只要函数至少接受一个参数,我就没事。

当函数采用零参数时,预处理器“有帮助地”删除“尾随逗号”,展开如下所示:
if(prepare(x y)) { funct(); }

很棒,不是吗?

我怎样才能修复这个宏,以便它可以使用零 __VA_ARGS__在 Visual C++ (VS 2005) 上?

显然 this is a bug in VS2005 .

最佳答案

不幸的是,我不再使用 Visual C++(因此无法验证它是否有效),但是您可以尝试一下吗?

#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
int fail[] = {0,} \
FUN(__VA_ARGS__); \
}

使用 gcc 4.2,两者 {0,}{0}在那种情况下是允许的,所以如果逗号被删除了也没关系。但是,我不确定这是否被规范、普遍实现的扩展或特定于 gcc 的东西普遍接受。

如果 {0,} Visual C++ 允许语法,那么这有望解决您的问题(假设我正确理解 __VA_ARGS__ 之前的最新逗号是被错误删除的内容,无论它出现在语法中的什么位置)。

关于visual-c++ - 是否可以防止在 Visual C++ 中删除带有空 __VA_ARGS__ 的逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7103824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com