C 언어에서 전역 변수(global variable)와 정적 변수(static variable)는 반드시 상수 값으로 초기화해야 합니다. 그 이유는 프로그램 실행이 시작되기 전에 이 변수들의 값이 이미 결정되어 있어야 하기 때문입니다. 만약 전역 변수나 정적 변수를 상수가 아닌 값으로 초기화하려고 하면 컴파일 오류가 발생합니다.
전역 변수와 정적 변수의 올바른 초기화 방법을 보여주는 예제 프로그램은 다음과 같습니다.
예제 코드
#include <stdio.h>
int a = 5;
static int b = 10;
int main() {
printf("The value of global variable a : %d", a);
printf("\nThe value of global static variable b : %d", b);
return 0;
}
실행 결과
위 프로그램의 출력 결과는 다음과 같습니다.
The value of global variable a : 5
The value of global static variable b : 10
코드 설명
위 프로그램에서 전역 변수 a에는 5라는 값이, 정적 변수 b에는 10이라는 값이 각각 상수로 초기화되어 있습니다. 따라서 프로그램은 아무 문제 없이 정상적으로 컴파일되고 실행됩니다.
상수로 초기화하지 않으면 어떻게 될까?
반대로, 전역 변수나 정적 변수를 상수가 아닌 값으로 초기화하면 오류가 발생합니다. 이를 보여주는 예제는 다음과 같습니다.
#include <stdio.h>
int func() {
return 25;
}
int main() {
static int a = func();
printf("%d ", a);
}
위 프로그램을 컴파일하면 "initializer element is not constant"(초기화 요소가 상수가 아닙니다)라는 오류 메시지가 출력됩니다. 함수 호출 결과처럼 컴파일 시점에 값을 확정할 수 없는 표현식은 정적 변수의 초기값으로 사용할 수 없기 때문입니다.
결론적으로, C 언어에서 전역 변수와 정적 변수는 반드시 컴파일 타임에 결정되는 상수 값으로만 초기화해야 합니다.