본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 078. array initialized from non-constant array expression – 상수 배열이 아닌 값으로 초기화

by about_IT 2025. 5. 2.

이 오류는 배열을 초기화할 때, 배열 초기값이 컴파일 타임에 상수로 평가될 수 없는 식이거나, 다른 배열 또는 런타임 계산된 값으로 초기화를 시도했을 때 발생합니다. 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언어는 메모리 배치와 초기화 규칙이 엄격하므로, 배열 초기화 시 반드시 상수 또는 반복문을 통해 명시적으로 복사하는 방식으로 처리해야 합니다.