이 오류는 구조체나 배열을 초기화할 때, 해당 타입이 가진 멤버 수보다 많은 값을 중괄호 블록으로 초기화하려 할 때 발생합니다. C언어에서는 초기화 리스트의 항목 수가 해당 타입이 가진 필드 수보다 많으면 컴파일 오류가 발생합니다.
이는 주로 구조체 멤버를 선언한 수보다 많은 값을 초기화할 때, 또는 배열의 길이를 초과한 값으로 초기화할 때 발생합니다.
● 오류 예제
#include <stdio.h>
struct Point {
int x;
int y;
};
struct Point p = {1, 2, 3}; // 오류: 필드보다 초기화 값이 많음
컴파일 시 다음과 같은 오류가 출력됩니다.
error: too many initializers for ‘struct Point’
● 해결 방법
초기화 리스트에 포함된 값의 개수가 해당 구조체 또는 배열의 정의와 정확히 일치해야 합니다. 정의된 멤버 수보다 많은 초기화 값은 제거해야 합니다.
#include <stdio.h>
struct Point {
int x;
int y;
};
struct Point p = {1, 2}; // 올바른 초기화
출력 예:
p.x = 1, p.y = 2
● 실전 팁
- 초기화 리스트의 길이는 반드시 구조체 멤버 수 또는 배열 크기와 일치해야 합니다.
- 배열이나 구조체에 초기화하는 경우 선언된 크기를 먼저 확인하세요.
- 컴파일 타임 상수 초기화 시, 필드 수와 일치하는지 항상 확인하는 습관이 필요합니다.
C언어에서 구조체와 배열의 초기화는 정적인 구조에 맞춰져 있으므로, 초기화 값의 수가 정의를 초과하지 않도록 항상 정확한 개수로 초기화하는 습관이 중요합니다.