기본 패턴
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 선언 | 다른 파일에 정의된 전역 이름을 참조할 때 사용 |
주의할 점
지역 변수의 주소를 함수 밖으로 반환하면 함수가 끝난 뒤 유효하지 않은 메모리를 가리키게 됩니다. 저장 기간과 포인터 생존 시간을 함께 생각해야 합니다.