프로그래밍언어/C언어[Error]

[C언어][Error] 050. array index in initializer not constant – 배열 인덱스 초기화가 상수가 아님

about_IT 2025. 4. 28. 00:10

이 오류는 배열 초기화 시 인덱스 값을 상수가 아닌 변수나 계산식 등으로 사용했을 때 발생합니다. C언어에서 배열을 초기화할 때는 컴파일 타임에 고정된 인덱스만 사용할 수 있으며, 런타임에 결정되는 값은 허용되지 않습니다.


특히 배열을 인덱스 지정 초기화 방식으로 사용할 때, 인덱스 자리에 상수가 아닌 표현식을 사용할 경우 컴파일러는 오류를 발생시킵니다.



● 오류 예제

#include <stdio.h>

int main() {
    int i = 1;
    int arr[3] = {[i] = 10};  // 오류: i는 상수가 아님
    return 0;
}

컴파일 시 다음과 같은 오류 메시지를 출력합니다.

error: array index in initializer not constant


● 해결 방법

배열 초기화 시 인덱스는 반드시 상수여야 하며, 아래와 같이 리터럴 상수 또는 매크로 상수를 사용해야 합니다.

#define INDEX 1

int main() {
    int arr[3] = {[INDEX] = 10};  // 정상 실행
    printf("%d\n", arr[1]);
    return 0;
}

출력 결과:

10


● 실전 팁

  • 배열 초기화 시 사용할 수 있는 인덱스는 반드시 컴파일 타임에 결정되어야 합니다.
  • 런타임에 결정되는 변수나 식은 배열 초기화 인덱스에 사용할 수 없습니다.
  • 정적 초기화와 동적 초기화의 차이를 명확히 이해하고 문맥에 맞게 선택하세요.

C언어에서는 정적 초기화 시 배열의 인덱스도 반드시 상수여야 하므로, 초기화 과정에서 동적인 요소를 사용하지 않도록 주의해야 합니다. 필요한 경우 런타임 대입 방식으로 코드를 수정하세요.