기억 부류 | 전역 | 지역 | 정적 | 레지스터 |
지정자 | extern | auto | static | register |
저장 장소 | 정적 데이터 영역 | 스택 | 정적 데이터 영역 | cpu의 레지스터 |
선언 위치 | 함수의 외부 | 함수의 내부 | 함수의 내부 | 함수의 내부 |
통용 범위 | 프로그램 전체 | 함수의 내부 | 함수의 내부 | 함수의 내부 |
파괴 시기 | 프로그램 종료시 | 함수 종료시 | 프로그램 종료시 | 함수 종료시 |
초기값 | 0으로 초기화 | 초기화되지 않음 | 0으로 초기화 | 초기화되지 않음 |
외부변수 예제 (extern)
#include <Turboc.h> int before = 11; void main() { extern int before; extern int after; printf("befere=%d, after=%d\n", before, after); } int after = 22;
main 안에 extern을 선언하여 before, after가 함수 바깥의 어딘가에 선언되어 있다고 알게된다
extern은 생략이 가능하다. 결국 같은 모듈 안에서는 별로 쓸모가 없다.
extern이 꼭 필요한 경우는 전역변수가 다른 외부 모듈에 선언되어 있을 때이다.
#include <Turboc.h> void main() { printf("value is %d\n", value); } |
int value = 1234; |
extern.cpp | global.cpp |
extern.cpp가 컴파일 될 때 어디인가 선언되어 있다고 알려준다.