문제 13 · 지역·정적 지역·전역 변수
문제 13 [4점]
아래 문제를 읽고, 각 문제의 제시어에 대한 설명을 예시와 함께 서술하시오.
지역local, 정적 지역static local, 전역global 변수에 대해 예시와 함께 서술하시오.
풀이 및 해설
세 변수는 유효 범위(scope) 와 수명(lifetime) 에서 차이가 있습니다.
| 구분 | 선언 위치 | 수명 | 초기값 |
|---|---|---|---|
| 지역 | 함수(블록) 내부 | 블록을 벗어나면 소멸 | 초기화 안 하면 쓰레기 값 |
| 정적 지역 | 함수 내부 + static | 프로그램 종료까지 유지 | 0 (한 번만 초기화) |
| 전역 | 함수 밖 | 프로그램 종료까지 유지 | 0 |
- 지역 변수: 함수가 호출될 때 생성되고 끝나면 사라집니다. 매 호출마다 새로 만들어집니다.
- 정적 지역 변수: 함수 안에 있어 이름은 그 함수에서만 보이지만, 값은 호출이 끝나도 유지되어 다음 호출에 이어집니다. 최초 1회만 초기화됩니다.
- 전역 변수: 함수 밖에 선언되어 프로그램 어디서나 접근할 수 있고, 프로그램 내내 살아 있습니다.
예시
cpp
int g = 100; // 전역
void counter() {
int local = 0; // 지역: 호출마다 0으로 재생성
static int staticLocal = 0; // 정적 지역: 값 유지
local++;
staticLocal++;
cout << local << " " << staticLocal << " " << g << endl;
}counter()를 세 번 호출하면 local은 늘 1이지만, staticLocal은 1, 2, 3으로 누적되고 g는 계속 100입니다.