Предупреждение компилятора (уровень 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)
}