컴파일러 경고(수준 1, 오류) C4002
함수와 유사한 매크로 호출 'identifier'에 대한 인수가 너무 많습니다.
매크로의 실제 매개 변수 개수가 매크로 정의의 정식 매개 변수 개수를 초과합니다. 전처리기는 추가 매개 변수를 수집하지만 매크로 확장 중에 무시합니다.
C4002는 가변 인자 매크로를 잘못 사용하는 경우에 발생할 수 있습니다.
다음 샘플에서는 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 C++의 Visual Studio .NET 버전 둘 다에서 코드가 유효하려면 추가 쉼표를 제거합니다.
// C4002b.cpp
// compile with: /W1
#define F(x,y)
int main()
{
F(2,,,,,,3,,,,,,) // C4002
// Try the following line instead:
// F(2,3)
}