c++ - 可变参数宏需要一个无意义的宏才能让它工作吗?

标签 c++ macros variadic-macros

下面的代码在 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/

相关文章:

c++ - 在嵌套的 if 语句中使用函数来触发 Action

c++ - 错误: 'ALIGN' undeclared (first use in this function) with ALIGN defined into macro

c++ - 如何在多个平台上使用__FILE__和__LINE__ info实现C/C++可变参数记录宏?

c - ##__VA_ARGS__ 在 C99 下当零参数时不吞下逗号

c++ - 在 Windows 上与 taglib 链接错误

c++ - 为什么 map.insert() 方法调用复制构造函数两次?

C++:比较相同类型的操作数类型

c++ - 回调宏 (QT)

Java机器人与图像对比

c++ - 宏内的宏扩展