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 |