編譯器警告 (層級 1,錯誤) C4002
類似函式的巨集引動過程 'identifier' 有太多引數
巨集中的實際參數數目超出巨集定義中的正式參數數目。 前置處理器會收集額外的參數,但會在巨集展開期間忽略這些巨集。
不正確地使用可變參數巨集時,會發生 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)
}