extern 키워드란?

extern은 변수나 함수가 다른 소스 파일에 정의되어 있음을 컴파일러에 알리는 키워드이다.

 

extern은 선언만 하기 때문에, 해당 변수나 함수가 링크 대상 파일 중 하나에 정의되어 있어야 한다. 그렇지 않으면 링크 타임 에러가 발생한다. 그리고 선언만 하기때문에 여기서 메모리가 할당되지는 않는다.

 

두개의 소스파일에서 정의했을때도 링크 타임 에러가 발생한다.

// .h
extern int gValue;  // 선언

// .c
int gValue = 123;   // 정의

 


참고 - 선언과 정의

그런데 어차피 어딘가에서 정의해야 할 것을 굳이 extern을 사용해 따로 선언하는걸까?

c의 컴파일러는 .c파일을 각각 따로 컴파일 하는데, 다른 파일에서 정의한 변수나 함수를 해당 .c 파일에서 사용하기 위해서 선언을 해두는것. 우리가 어떤 함수를 사용할 때 .h  를 include 하면서 선언을 가져와서 사용하면 해당 파일에 선언하지 않았는데도 쓸 수 있는것이 그런 이치.

int count; //-> 변수를 선언과 정의 동시에 함 메모리 할당됨

extern int value; // 변수를 선언만 함
void func(); //-> 함수를 선언만 함 (extern이 생략된것과 같음)

'공부 > C\C++' 카테고리의 다른 글

c 매크로 - ## (토큰 결합 연산자)  (0) 2025.06.28
typeid 키워드  (0) 2025.06.28
std::atomic<T>::compare_exchange_weak  (0) 2025.06.14
std::move  (0) 2025.06.11
멤버 함수 포인터를 활용한 호출  (0) 2025.03.20

+ Recent posts