Udostępnij przez


Ostrzeżenie kompilatora (poziom 1, błąd) C4002

zbyt wiele argumentów wywołania makra przypominającego funkcję "identyfikator"

Uwagi

Liczba rzeczywistych parametrów w makrze przekracza liczbę parametrów formalnych w definicji makra. Preprocesor zbiera dodatkowe parametry, ale ignoruje je podczas rozszerzania makr.

C4002 może wystąpić w przypadku niepoprawnego używania makr wariadycznych.

Example

Poniższy przykład generuje kod 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);
}

Ten błąd można również wygenerować w wyniku pracy kompilatora, która została wykonana dla programu Visual Studio .NET 2003: dodatkowe przecinki w makrze nie są już akceptowane.

Kompilator nie akceptuje już dodatkowych przecinków w makrze. Aby kod był prawidłowy zarówno w wersjach Visual Studio .NET 2003, jak i Visual Studio .NET visual C++, usuń dodatkowe przecinki.

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