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

C 언어에서 정적(Static) 변수의 기본값 완벽 이해하기

C 언어에서 static 키워드를 사용하면 해당 변수, 데이터 멤버 또는 함수는 프로그램이 종료될 때까지 메모리에 할당되어 유지되며, 생명 주기가 프로그램 전체로 확장됩니다. 또한 정적(static) 함수는 클래스 이름을 통해 직접 호출할 수 있다는 특징이 있습니다.

정적 변수의 특징

정적 변수는 단 한 번만 초기화됩니다. 컴파일러는 프로그램이 끝날 때까지 이 변수를 메모리에 유지하며, 정적 변수는 함수 내부 또는 외부 어디에서든 정의할 수 있습니다. 다만 선언된 블록 내에서만 접근 가능한 지역적인 성격을 가집니다.

가장 중요한 특징은 정적 변수의 기본값은 0이라는 점입니다. 별도의 초기화 없이 선언만 하면 자동으로 0으로 설정되며, 프로그램 실행이 종료될 때까지 값이 유지됩니다.

정적 변수 선언 문법

static datatype variable_name;

각 구성 요소의 의미는 다음과 같습니다.

  • datatype − int, char, float 등 변수의 자료형을 의미합니다.
  • variable_name − 사용자가 직접 지정하는 변수의 이름입니다.
  • value − 변수를 초기화하는 값으로, 명시하지 않으면 기본값인 0으로 설정됩니다.

예제 코드

다음은 C 언어에서 정적 변수의 기본값을 확인하는 예제입니다.

#include <stdio.h>
int main() {
    static int a;
    int b;
    printf("정적 변수의 기본값 : %d\n", a);
    printf("비정적 변수의 기본값 : %d\n", b);
    return 0;
}

실행 결과

정적 변수의 기본값 : 0
비정적 변수의 기본값 : 0

코드 분석

위 프로그램에서는 두 개의 변수를 선언했습니다. 하나는 정적 변수 a이고, 다른 하나는 일반(비정적) 변수 b입니다.

static int a;
int b;
printf("정적 변수의 기본값 : %d\n", a);
printf("비정적 변수의 기본값 : %d\n", b);

흥미로운 점은 두 변수 모두 초기화하지 않았음에도 출력 결과가 0으로 표시된다는 것입니다. 정적 변수는 C 표준에 따라 자동으로 0으로 초기화되지만, 함수 내부의 일반 지역 변수는 초기화되지 않은 상태(쓰레기 값)일 수 있습니다. 위 예제에서 비정적 변수도 0으로 출력된 것은 컴파일러나 실행 환경에 따라 해당 메모리 영역이 우연히 0이었기 때문일 수 있으므로, 일반 지역 변수는 반드시 명시적으로 초기화하는 것이 안전한 코딩 습관입니다.