Предупреждение компилятора (уровень 1, ошибка) C4002
слишком много аргументов для вызова макросов, таких как функция, "идентификатор"
Количество фактических параметров в макросе превышает количество формальных параметров в определении макроса. Препроцессор собирает лишние параметры, но игнорирует их в расширении макроса.
C4002 может возникать при неправильном использовании макросов variadic.
Следующий пример приводит к возникновению предупреждения 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 Studio .NET 2003 и в версиях Visual Studio .NET для 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)
}