Variadic宏需要一个无意义的宏来让它工作吗?

时间:2013-07-13 19:52:48

标签: 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的实际参数不够实用。为什么或编译器有任何错误?

1 个答案:

答案 0 :(得分:3)

这是一个已知的bug in msvc

在您的情况下,__VA_ARGS__被视为需要扩展的宏。