下面的代码在 VC++ 2012 上是可以的
#include <algorithm>
#define MAX_OF_2(a,b) std::max(a,b)
#define FOO(a) a
// work
#define MAX2(...) FOO(MAX_OF_2(__VA_ARGS__))
// Not work
// #define MAX2(...) MAX_OF_2(__VA_ARGS__)
int main()
{
int i = MAX2(1,2);
}
如果不使用FOO
宏,它就无法编译。它显示 MAX_OF_2
的实际参数不足。为什么或者编译器上有任何错误?
最佳答案
这是已知的bug in msvc
在您的情况下,__VA_ARGS__
被视为需要扩展的宏。
关于c++ - 可变参数宏需要一个无意义的宏才能让它工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633694/