变分宏需要一个没有意义的宏来让它工作

Variadic Macros need a unmeaningful macro to let it work?

本文关键字:有意义 工作 一个      更新时间:2023-10-16

以下代码在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的实际参数。为什么或编译器上有任何错误?

这是msvc 中的一个已知错误

在您的情况下,__VA_ARGS__被认为是一个需要扩展的宏。