프로그래밍언어/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 변수 초기화 시에는 반드시 컴파일 타임 상수를 사용해야 합니다.
- 함수 호출 결과나 지역 변수의 값은 초기화에 사용할 수 없습니다.
- 초기화가 불가능한 경우에는 변수를 선언한 후, 런타임 시에 별도로 값을 대입하세요.
이 오류는 프로그램이 시작되기 전에 변수의 값을 고정하려 할 때 발생하는 제한으로, 상수와 변수의 차이점을 명확히 이해하고 있어야 오류 없이 초기화할 수 있습니다.