C 언어의 네 가지 저장 클래스
C 프로그래밍 언어에는 다음과 같이 네 가지 저장 클래스(storage class)가 존재합니다.
- auto
- extern
- static
- register
이 중 extern은 변수를 블록 바깥, 즉 모든 함수의 외부에 선언할 때 사용하는 키워드로, 전역 변수(global variable) 또는 외부 변수(external variable)와 깊은 관련이 있습니다.
전역 변수 / 외부 변수란?
extern 키워드로 선언된 변수는 함수나 블록 내부가 아닌 외부에 선언되며, 다음과 같은 특징을 가집니다.
- 범위(Scope) — 전역 변수는 프로그램 전체 어디에서든 접근하고 사용할 수 있습니다.
- 기본값(Default value) — 별도로 초기화하지 않으면 자동으로 0으로 초기화됩니다.
동작 알고리즘
extern 변수의 동작 과정은 아래 알고리즘과 같습니다.
START
Step 1: extern 변수 선언 및 초기화
Step 2: int형 지역 변수 a = 3 선언 및 초기화
Step 3: a 값 출력
Step 4: 함수 호출 (Step 5 실행)
Step 5: 호출된 함수 내부에서
a 값 출력 (extern 전역 변수의 값 사용)
예제 1: extern 저장 클래스 기본 사용법
다음은 extern 저장 클래스를 활용한 C 프로그램입니다.
extern int a = 5; /* 이 'a'는 프로그램 전체에서 접근 가능 */
main() {
int a = 3; /* 이 'a'는 main 함수 내에서만 유효 */
printf("%d", a);
fun();
}
fun() {
printf("%d", a);
}
출력 결과
3 5
main 함수 안에서는 지역 변수 a = 3이 우선 적용되므로 3이 출력됩니다. 반면 fun 함수에는 지역 변수가 없기 때문에 extern으로 선언된 전역 변수 a = 5의 값이 그대로 출력됩니다. 이처럼 extern 변수는 프로그램 전체 범위에서 유효하다는 것을 확인할 수 있습니다.
예제 2: 헤더 파일을 활용한 extern 변수 공유
extern은 여러 소스 파일 간에 변수를 공유할 때 특히 유용합니다. 헤더 파일에 extern 변수를 선언한 뒤, 다른 소스 파일에서 해당 헤더를 포함(include)하여 사용할 수 있습니다.
External.h
extern int a = 14;
extern int b = 8;
externstorage.c 파일
#include<stdio.h>
#include "External.h"
int main(){
int sub = a - b;
printf("%d - %d = %d ", a, b, sub);
return 0;
}
출력 결과
14 - 8 = 6
헤더 파일 External.h에 extern으로 선언된 변수 a와 b를 externstorage.c 파일에서 가져와 사용했습니다. 두 변수의 차를 계산한 결과 6이 정상적으로 출력되며, 이를 통해 extern을 이용하면 파일 간에도 전역 변수를 손쉽게 공유할 수 있음을 알 수 있습니다.