이 오류는 배열을 초기화할 때, 배열 초기값이 컴파일 타임에 상수로 평가될 수 없는 식이거나, 다른 배열 또는 런타임 계산된 값으로 초기화를 시도했을 때 발생합니다. C언어에서는 전역 변수나 정적(static) 배열의 초기화는 반드시 상수 표현식이어야 하며, 그렇지 않으면 컴파일러는 오류를 발생시킵니다.
지역 변수의 경우에는 컴파일 타임 상수가 아닌 값으로도 초기화할 수 있지만, 정적 컨텍스트에서는 이를 허용하지 않습니다.
● 오류 예제
int arr1[] = {1, 2, 3};
int arr2[] = arr1; // 오류: 다른 배열로 초기화 불가
컴파일 시 다음과 같은 오류 메시지가 출력됩니다.
error: array initialized from non-constant array expression
● 해결 방법
배열을 초기화할 때는 상수 배열을 직접 작성하거나, 반복문 등을 이용해 복사해야 합니다. 배열 간의 대입은 직접적인 초기화가 아닌 복사 연산으로 처리해야 합니다.
#include <stdio.h>
int main() {
int arr1[] = {1, 2, 3};
int arr2[3];
for (int i = 0; i < 3; i++) {
arr2[i] = arr1[i]; // 배열 복사
}
for (int i = 0; i < 3; i++) {
printf("%d ", arr2[i]);
}
return 0;
}
출력 결과:
1 2 3
● 실전 팁
- 배열 초기화는 상수값으로만 가능하며, 다른 배열로 초기화할 수 없습니다.
- 전역 또는 static 배열 초기화는 반드시 상수 표현식만 사용할 수 있습니다.
- 동일한 값을 복사할 때는 반복문이나 memcpy를 사용하세요.
C언어는 메모리 배치와 초기화 규칙이 엄격하므로, 배열 초기화 시 반드시 상수 또는 반복문을 통해 명시적으로 복사하는 방식으로 처리해야 합니다.