更新: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)
}