Dela via


Kompilatorvarning (nivå 1, fel) C4002

för många argument för funktionsliknande makroanrop "identifierare"

Anmärkningar

Antalet faktiska parametrar i makrot överskrider antalet formella parametrar i makrodefinitionen. Förprocessorn samlar in de extra parametrarna men ignorerar dem under makroexpansionen.

C4002 kan inträffa vid felaktig användning av variadic makron.

Example

I följande exempel genereras 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);
}

Det här felet kan också genereras som ett resultat av kompilatorns efterlevnadsarbete som utfördes för Visual Studio .NET 2003: extra kommatecken i makrot accepteras inte längre.

Kompilatorn accepterar inte längre extra kommatecken i ett makro. Ta bort extra kommatecken för att koden ska vara giltig i både Visual Studio .NET 2003- och Visual Studio .NET-versionerna av Visual C++.

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