C 프로그래밍에서의 선언과 초기화
C 언어로 프로그래밍할 때 어떤 선언과 초기화가 유효(합법)하고, 어떤 것이 무효(불법)인지 정확히 아는 것은 매우 중요합니다. 이 글에서는 다양한 예시를 통해 그 차이를 명확하게 살펴보겠습니다.
변수 선언이란?
합법적·불법적 문장을 논의하기 전에, 먼저 C에서 변수를 선언하고 초기화하는 기본 방법부터 알아보겠습니다.
변수 선언 구문
자료형 v1, v2, … vn;
여기서 v1, v2, … vn은 각각 변수의 이름을 의미합니다.
예를 들면 다음과 같습니다.
int sum;
float a, b;
지역 선언과 전역 선언
변수는 두 가지 방식으로 선언할 수 있습니다.
- 지역 선언(Local declaration): main 블록 내부에서 변수를 선언하는 방식으로, 해당 변수의 값은 그 블록 안에서만 사용할 수 있습니다.
- 전역 선언(Global declaration): main 블록 외부에서 변수를 선언하는 방식으로, 프로그램 전체 어디에서든 값을 사용할 수 있습니다.
예시:
int a, b; /* 전역 선언 */
main() {
int c; /* 지역 선언 */
- - -
}
변수 초기화란?
변수 초기화는 선언과 동시에 값을 할당하는 것을 말하며, 구문은 다음과 같습니다.
구문
자료형 v1 = 값;
예시:
int sum = 0;
float a = 1, b = 4.5;
자료형으로 변수를 선언할 때 선언 시점에 곧바로 값을 초기화할 수 있습니다. 단, 선언과 초기화를 진행할 때는 반드시 해당 규칙을 준수해야 합니다.
합법적·불법적 선언 및 초기화 예시
그럼 C 언어에서 합법적 선언·초기화와 불법적 선언·초기화의 대표적인 예시를 살펴보겠습니다.
char a = 65;
유효한(합법적인) 문장입니다. 상수로 변수를 초기화할 수 있기 때문입니다.
static int p = 20, q = p * p;
무효한(불법적인) 문장입니다. static 변수는 반드시 상수로 초기화해야 하는데, 여기서 q는 상수가 아닌 값으로 초기화되었기 때문입니다.
double x = 30 * PI;
유효한 문장입니다. 상수 표현식(constant expression)으로 변수를 초기화했기 때문입니다.
double diameter[] = {1, PI/2, PI, 2*PI/2};
유효한 문장입니다. 배열 요소들을 상수로 초기화했기 때문입니다.
예제 프로그램
합법적인 선언 및 초기화의 경우
#include<stdio.h>
void main() {
int a, b;
a = 10, b = 20;
printf("%d", a<b);
printf("%d", a<=b);
printf("%d", a>b);
printf("%d", a>=b);
printf("%d", a==b);
printf("%d", a!=b);
}
출력 결과
1 1 0 0 0 1
불법적인 선언 및 초기화의 경우
#include <stdio.h>
int main(){
static int p=20, q=p*p;// 불법적인 초기화
printf("%d%d",p,q);
return 0;
}
출력 결과
컴파일 오류 발생
error: initializer element is not constant
static int p=20, q=p*p;