Поделиться через


Предупреждение компилятора (уровень 1) C4002

Обновлен: Ноябрь 2007

Сообщение об ошибке

слишком много фактических параметров для макроопределения "идентификатор".
too many actual parameters for macro 'identifier'.

Количество фактических параметров в макросе превышает количество формальных параметров в определении макроса. Препроцессор собирает лишние параметры, но игнорирует их в процессе макрорасширения.

Ошибка C4002 может возникать в результате неправильного использования Variadic Macros.

Следующий пример демонстрирует причины возникновения ошибки 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)
}