Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 변수 선언과 초기화: 합법적·불법적 사례 완벽 정리

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;