Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 extern 저장 클래스(Storage Class) 완벽 정리 – 개념부터 예제까지

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을 이용하면 파일 간에도 전역 변수를 손쉽게 공유할 수 있음을 알 수 있습니다.