C시작과 문법

scope와 저장 기간

지역 변수, 전역 변수, static 변수의 범위와 생존 기간이 어떻게 다른지 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

c
int global_count = 0;

int next_id(void) {
    static int id = 0;
    id += 1;
    return id;
}

설명

  • scope는 이름을 어디에서 볼 수 있는지, 저장 기간은 값이 메모리에 얼마나 오래 살아 있는지를 뜻합니다.
  • 함수 안의 일반 지역 변수는 블록을 벗어나면 사라지는 자동 저장 기간을 가집니다.
  • 파일 바깥에 선언한 전역 변수는 프로그램이 끝날 때까지 유지됩니다.
  • static 지역 변수는 함수 안에 있어도 값이 호출 사이에 유지되므로 상태를 누적할 때 쓰입니다.

짧은 예제

c
#include <stdio.h>

void visit(void) {
    static int calls = 0;
    calls += 1;
    printf("visit count = %d\n", calls);
}

int main(void) {
    visit();
    visit();
    return 0;
}

빠른 정리

항목설명
블록 scope{} 안에서만 이름을 사용할 수 있음
파일 scope파일 전체에서 이름을 볼 수 있음
자동 저장 기간함수 호출 동안만 존재하는 지역 변수
static 저장 기간프로그램이 끝날 때까지 유지되는 객체
extern 선언다른 파일에 정의된 전역 이름을 참조할 때 사용

주의할 점

지역 변수의 주소를 함수 밖으로 반환하면 함수가 끝난 뒤 유효하지 않은 메모리를 가리키게 됩니다. 저장 기간과 포인터 생존 시간을 함께 생각해야 합니다.