7.3 외부 연결(extern), 각종 저장 유형
다른 범위에 속하는 변수들을 서로 연결하는 것을 의미합니다. C언어에서는,
1. 무연결 : 지역 변수로서 위부와 연결을 가지지 않음.
2. 외부 연결 : 전역 변수로서 여러 개의 소스 파일에 걸쳐서 사용됨.
3. 내부 연결 : 전역 별수로서 하나의 소스 파일에서만 사용이 가능함.
3개의 연결이 유효합니다.
외부 연결
여러 개의 소스 파일(source1.c , source2.c 등 여러개의 소스파일) 에서는 하나의 파일에서는 int i = 0;과 같이 일반적으로 선언해주고
다른 외부 파일에서는 extern int i = 0; 과 같이 앞에 extern을 넣어줍니다.
extern이 의미하는바는 이 함수는 다른 소스파일에 이미 만들어져있으므로 그것을 참조한다. 라고 이해하시면 좋습니다. 만약 extern 키워드를 사용하지 않을시에는 전역 변수가 외부 연결 가능하다고 해도 다른 소스 파일에서 참조가 불가능함에 유의하여야하며, extern를 넣어야만 컴파일러가 변수의 타입을 인식가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | //linkage1.c #include <stdio.h> int all_files; static int this_file; extern void sub(); int main() { sub(); printf("%d\n", all_files); return 0; } | cs |
1 2 3 4 5 6 7 | //linkage2.c extern int all_files; void sub(void) { all_files = 10; } | cs |
내부 연결
전역 변수 앞에 static이 붙으면 내부 연결입니다. 하나의 소스 파일에서만 사용이 가능합니다.
위의 2개의 소스파일에서 static int this_file은 내부 연결로써 linkage2.c 에서 extern를 이용한 참조가 불가능함을 알아야합니다.
C에서 사용 가능한 변수의 저장 유형
저장 유형 |
키워드 |
정의되는 위치 |
범위 |
생존 시간 |
자동 |
auto |
함수 내부 |
지역 |
임시 |
레지스터 |
register |
함수 내부 |
지역 |
임시 |
정적 지역 |
staic |
함수 내부 |
지역 |
영구 |
전역 |
없음 |
함수 외부 |
모든 소스 파일 |
영구 |
정적 전역 |
static |
함수 위부 |
하나의 소스 파일 |
영구 |
외부 참조 |
extern |
함수 외부 |
모든 소스 파일 |
영구 |
-일반적으로는 자동 저장 유형을 사용하는 것이 권장됩니다. 알아서 생성되고 소멸되므로 메모리를 효율적으로 사용하게 도와주고, 독립적으로 설계가 가능합니다.
- 자주 사용되는 코드는 register함수를 사용하는것이 좋습니다. cpu의 캐시에 상주되기때문에. 속도가 아주빠르지만, 개수가 제한되더있고, 지역 변수만 선언이 가능하다, 그리고 주소가 없기때문에 &를 사용해서는 안된다.