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

[C언어][Error] 020. initializer element is not constant – 초기화 값이 컴파일 타임 상수가 아님

about_IT 2025. 4. 24. 19:29

이 오류는 전역 변수 또는 정적(static) 변수의 초기화 값이 컴파일 시간에 결정될 수 없는 경우 발생합니다. C언어에서는 이러한 변수들을 초기화할 때 반드시 **컴파일 타임 상수(constant expression)** 를 사용해야 하며, 실행 중 계산되는 값은 사용할 수 없습니다.


예를 들어, 지역 변수의 값이나 함수의 반환값, 포인터 역참조 값 등을 전역 변수의 초기값으로 설정하면 이 오류가 발생합니다.



● 오류 예제

int getValue() {
    return 42;
}

int x = getValue();  // 오류: 함수 반환값은 상수가 아님

또는 아래와 같이 지역 변수로부터 값을 받아 초기화할 수도 없습니다.

int size = 5;
int arr[size] = {1, 2, 3, 4, 5};  // 오류 발생

이 경우 컴파일러는 다음과 같은 오류 메시지를 출력합니다.

error: initializer element is not constant


● 해결 방법

초기화 값은 반드시 컴파일 시간에 결정 가능한 상수여야 하며, 일반적으로 상수 리터럴, enum 값, #define으로 정의된 매크로 등이 이에 해당합니다.

#define INIT_VALUE 42

int x = INIT_VALUE;  // 정상

또는 다음과 같이 수동 초기화를 수행해야 합니다.

#include <stdio.h>

int getValue() {
    return 42;
}

int x;

int main() {
    x = getValue();  // 초기화가 아닌 대입으로는 가능
    printf("%d\n", x);
    return 0;
}

출력 결과:

42


● 실전 팁

  • 전역 및 static 변수 초기화 시에는 반드시 컴파일 타임 상수를 사용해야 합니다.
  • 함수 호출 결과나 지역 변수의 값은 초기화에 사용할 수 없습니다.
  • 초기화가 불가능한 경우에는 변수를 선언한 후, 런타임 시에 별도로 값을 대입하세요.

이 오류는 프로그램이 시작되기 전에 변수의 값을 고정하려 할 때 발생하는 제한으로, 상수와 변수의 차이점을 명확히 이해하고 있어야 오류 없이 초기화할 수 있습니다.