| 기억 부류 | 전역 | 지역 | 정적 | 레지스터 |
|---|---|---|---|---|
| 지정자 | extern | auto | static | register |
| 저장 장소 | 정적 데이터 영역 | 스택 | 정적 데이터 영역 | CPU의 레지스터 |
| 선언 위치 | 함수의 외부 | 함수의 내부 | 함수의 내부 | 함수의 내부 |
| 통용 범위 | 프로그램 전체 | 함수의 내부 | 함수의 내부 | 함수의 내부 |
| 파괴 시기 | 프로그램 종료시 | 함수의 종료시 | 프로그램 종료시 | 함수 종료시 |
| 초기값 | 0으로 초기화 | 초기화되지 않음 | 0으로 초기화 | 초기화되지 않음 |
# include <...>
void func();
int global; // 함수 외부에서 선언된 전역변수
void main(){
int local; // main 함수의 지역변수
golobal = 1; // 가능
local = 2; // 가능
i=3; // 불가능
}
void func(){
int i; // func 함수의 지역변수
golobal = 1; // 가능
local = 2; // 불가능
i=3; // 불가능
}
변수가 생성되는 기억 장소가 다르다.
지역변수 사용의 장점
extern 키워드는 변수가 외부 어딘가에 선언되어 있다는 것을 알리는 역할을 한다.
#include <...>
int before = 11;
void main(){
extern int after;
printf("%d %d\n", before, after);
}
int after = 22;
// -------global.c---------
int value=1234;
// -------main.c-----------
# include <...>
void main(){
extern int value;
printf("%d\n", value);
}
void PrintCount();
void main(){
for (int i=0;i<5;i++){
PrintCount();
}
}
void PrintCount(){
static itn count = 0;
count++;
printf("%d\n", count);
}
출처 : 혼자 연구하는 C/C++ 1 / 김상형 저 / 와우북스