Mar*_* Ba 7 macros preprocessor visual-c++ variadic-macros
在Visual Studio 2005上,我有一个看起来像这样的宏(例如!!):
#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
FUN(__VA_ARGS__); \
}
/**/
Run Code Online (Sandbox Code Playgroud)
只要函数至少有一个参数,我就没事了.
当函数接受零参数时,预处理器"帮助"删除"尾随逗号",扩展如下:
if(prepare(x y)) { funct(); }
Run Code Online (Sandbox Code Playgroud)
太棒了,不是吗?
我该如何修复这个宏,以便__VA_ARGS__
在Visual C++(VS 2005)上使用零?
不幸的是,我不再使用Visual C++(因为这样无法验证这是否有效),但你可以尝试这个吗?
#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
int fail[] = {0,} \
FUN(__VA_ARGS__); \
}
Run Code Online (Sandbox Code Playgroud)
使用GCC 4.2,两者{0,}
并{0}
允许在这方面,所以如果逗号被删除或者不是也没有什么关系.但是,我不确定这是否在规范,通常实现的扩展或gcc特定的内容中被普遍接受.
如果{0,}
语法是由Visual C++允许,那么这将有望解决您的问题(假设我理解正确的话,最近一段时间逗号前__VA_ARGS__
是什么是被错误删除,不论它在语法出现的地方).
归档时间: |
|
查看次数: |
1245 次 |
最近记录: |