이 오류는 전역 변수나 정적(static) 변수의 초기화에서 초기화 값이 컴파일 타임에 계산되지 못하는 표현식일 경우 발생합니다.
C언어에서 전역/정적 변수의 초기화는 반드시 컴파일 시간에 계산 가능한 상수식이어야 하며, 타입 변환 없이 정확히 일치해야 합니다.
예를 들어 함수 호출 결과(sqrt(4))처럼 런타임에 계산되는 값이나, 타입이 일치하지 않는 값을 초기값으로 사용할 경우 오류가 발생합니다.
● 오류 예제
#include <math.h>
int a = sqrt(4); // 오류: sqrt는 런타임 함수임
컴파일 시 다음과 같은 오류 메시지를 출력합니다.
error: initializer element is not computable at load time
● 해결 방법
런타임 연산이 필요한 값은 초기화하지 않고 main 함수 등 실행 시점에 값을 할당해야 합니다. 또는 컴파일 타임에 결정되는 상수를 사용해야 합니다.
#include <math.h>
#include <stdio.h>
int a; // 초기화 생략
int main() {
a = sqrt(4); // 런타임에 계산
printf("%d\n", a);
return 0;
}
출력 결과:
2
● 실전 팁
- 전역/정적 변수 초기화는 반드시 상수식이어야 합니다.
- 함수 호출이나 계산이 필요한 초기화는 런타임에서 수행해야 합니다.
- 초기화 위치와 타이밍을 구분하여 선언/초기화 구조를 설계하세요.
C언어는 컴파일 타임과 런타임의 초기화 시점을 명확히 구분하기 때문에, 계산이 필요한 값은 전역 또는 정적 영역에서는 직접 초기화할 수 없습니다. 필요한 경우 main 함수에서 값을 대입하는 방식으로 코드를 작성하세요.