C 언어 extern 완전 가이드 | 변수와 함수 공유 실전 방법

1. extern이란 무엇인가?

C 언어에서 extern은 다른 파일에 정의된 변수와 함수를 이용하기 위한 “다른 곳의 것을 빌리는” 신호입니다. 예를 들어, 어떤 파일에서 정의한 전역 변수를 다른 파일에서 사용하고 싶을 때 사용됩니다. 프로그램이 여러 파일로 분할될 경우, 각 파일 간에 데이터를 공유하기 위해 extern이 활약합니다. 상상해 보세요. 프로그램 안에 방이 많이 있고, extern은 옆 방에서 도구를 빌려오는 “대여 계약서”와 같은 역할을 합니다. “여기에는 없지만, 옆 방에 있다”는 의미입니다.

예시

// file1.c
int g_data = 100;

// file2.c
extern int g_data;
void printData() {
    printf("%dn", g_data);  // file1.c의 g_data에 접근
}
이 예에서는 g_datafile1.c에서 정의되어 있지만, extern을 사용함으로써 file2.c에서 그 변수에 접근하고 있습니다.

2. extern와 전역 변수의 관계

extern은 특히 전역 변수와 깊은 관계가 있습니다. 전역 변수는 프로그램 전체에서 한 번 정의되면, 어떤 파일에서든 접근 가능합니다. 하지만, 그대로는 다른 파일이 변수의 위치를 알지 못하므로, extern을 사용해 “여기에 있어!” 라고 알려줄 필요가 있습니다. 주의점으로는, extern은 선언에 불과하므로 메모리가 할당되지 않습니다. 변수의 메모리 할당은 원본 파일에서 이루어집니다.

전역 변수의 예

// file1.c
int counter = 0;

// file2.c
extern int counter;  // 다른 파일에서 정의된 counter를 사용
void incrementCounter() {
    counter++;  // counter의 값을 업데이트
}

3. 헤더 파일에서 extern의 사용

대규모 프로젝트가 되면 변수와 함수를 여러 번 선언하는 것이 번거롭습니다. 이때 유용한 것이 “헤더 파일”입니다. 헤더 파일은 다른 파일과 공유하기 위한 정보를 한 곳에 모아두는 파일입니다. 이 헤더 파일에 extern 선언을 모아두면 다른 파일이 동일한 전역 변수와 함수를 참조할 수 있게 됩니다. 헤더 파일은 프로젝트 전체의 “툴박스”라고도 할 수 있습니다. 공통 도구를 한 곳에 모아두고, 필요한 파일에서 그 도구를 사용하는 이미지입니다.

헤더 파일의 예

// globals.h
extern int global_variable;
void printGlobalVariable();

// file1.c
#include "globals.h"
int global_variable = 10;

// file2.c
#include "globals.h"
void printGlobalVariable() {
    printf("%dn", global_variable);
}

4. 자주 발생하는extern의 오류

extern 사용법에는 몇 가지 주의점이 있습니다. 예를 들어, extern으로 선언한 변수에 초기값을 설정할 수 없습니다. extern은 단순히 ‘선언’일 뿐이며, ‘정의’가 아니기 때문입니다. 또한, 변수 정의가 이루어지지 않은 파일에서 extern 선언을 하면, 링크 오류가 발생합니다.

자주 발생하는 오류

extern int data = 100;  // 초기화는 NG
위와 같이, extern과 함께 변수를 초기화하려고 하면 오류가 발생합니다. extern은 다른 파일에서 정의된 변수를 참조하기 위한 것이며, 변수를 정의하거나 초기화하기 위한 것이 아니기 때문입니다.

5. extern을 사용한 실용적인 사용 예

extern은 특히 대규모 프로젝트에서 활약합니다. 예를 들어, 여러 모듈에 걸친 프로그램에서는 공통 데이터와 함수를 extern으로 선언하고 각 파일에서 재사용할 수 있습니다. 이러한 프로젝트에서는 extern을 사용함으로써 프로그램의 모듈화가 진행되고, 유지보수성 및 가독성이 향상됩니다. 이를 통해 각 파일이 독립적으로 기능하면서도 필요한 데이터를 공유할 수 있게 됩니다.

실용적인 예

// main.c
#include "globals.h"

int main() {
    printGlobalVariable();  // 다른 파일에서 정의된 함수를 호출
    return 0;
}

// globals.c
#include "globals.h"
int global_variable = 100;

void printGlobalVariable() {
    printf("%dn", global_variable);  // 전역 변수를 출력
}
이 기사에서는 extern의 기본부터 실용적인 사용법까지 포괄적으로 다루고 있습니다. C 언어에서 프로그램의 분할 및 재사용을 촉진하는 중요한 키워드로서, extern의 역할을 이해하는 것은 매우 중요합니다.
年収訴求