编译器警告(等级 1)C4002

更新:2007 年 11 月

错误消息

宏“identifier”的实参太多

宏中实参的数目超过了宏定义中形参的数目。预处理器收集额外的参数,但是在宏展开时忽略这些参数。

当错误地使用 Variadic Macros 时,可能发生 C4002。

下面的示例生成 C4002:

// C4002.cpp
// compile with: /W1
#define test(a) (a)

int main() {
   int a = 1;
   int b = 2;
   a = test(a,b);   // C4002
   // try..
   a = test(a);
}

也可能由于为 Visual Studio .NET 2003 进行的编译器一致性工作生成此错误:不再在宏中接受多余逗号。

编译器将不再在宏中接受多余逗号。为使代码在 Visual C++ 的 Visual Studio .NET 2003 和 Visual Studio .NET 版本中都有效,移除多余的逗号。

有关更多信息,请参见编译时的重大更改摘要

// C4002b.cpp
// compile with: /W1
#define F(x,y)
int main()
{
   F(2,,,,,,3,,,,,,)   // C4002
   // Try the following line instead:
   // F(2,3)
}