C++ 개발을 하다보면 클래스별로, 기능별로 여러 파일을 만들어야 하는 경우가 있습니다.
다른 파일의 전역변수를 사용하는게 잘 되지 않아서
전역변수를 포기하고 별도의 객체를 만들어야 할지 고민하기도 하는데요.
이럴 때 도움이 되는 키워드 extern 에 대해 알아보겠습니다.
개요
개발을 하면서 두개의 소스코드 : a.cpp, main.cpp 를 만들었다고 가정해 봅시다.
a.cpp은 전역변수를 선언하고 있고, main.cpp는 이를 사용하는 코드입니다.
a.cpp
int test=123
main.cpp
#include <iostream>
using namespace std;
int main () {
cout << test << endl;
return 0;
}
위와같이 작성하는 경우 main.cpp 파일에서는 는 test 라는 전역변수에 대해 알지 못하기 때문에
빌드가 되지 않습니다.
main.cpp에서 a.cpp 에 선언 된 전역변수 test 를 사용하려면 어떻게 해야할까요?
C++에서 이런 문제를 해결하기 위한 키워드가 extern 입니다.
C++ 에서 extern 키워드는 다른 소스파일에서 선언한 전역변수를 호출하기 위해 사용됩니다.
extern 활용
위의 예시에서 main.cpp 를 아래와 같이 고쳐봅니다.
추가된 코드는 extern 을 이용한 전역변수 선언 외에는 없습니다.
#include <iostream>
using namespace std;
// extern declaration
extern int test;
int main () {
cout << test << endl;
return 0;
}
이렇게 main.cpp를 수정함으로써 우리는 a.cpp 파일에서 선언 한 test 전역변수를 사용할 수 있게 됩니다.
주의사항
C++ extern 키워드를 사용하면서 조심해야 할 점은 없을까요?
생각해봅시다.
여러 파일에 동일한 변수가 선언되어 있는경우 extern 은 어떻게 사용될까요?
사용하는 파일에서 어느 파일의 전역변수를 사용해야할 지 모르는 상황이 발생하게 됩니다.
extern 으로 선언한 변수는 반드시 한 파일에서만 초기화를 해야합니다.
static, extern 차이 점
선언 된 변수를 공유한다는 점에서 static과 extern 키워드 개념을 헷갈리시는 분들도 간혹 있는 것 같습니다.
개념을 다시한번 짚고 넘어가 보겠습니다.
static 변수의 개념 :
- extern 변수는 다른 파일에 정의 된 전역변수를 참조하는 경우 사용합니다.
- 실제 메모리 공간은 사용하는 파일이 아닌, 변수가 정의된 파일에서 할당하게 됩니다.
extern 변수의 개념:
- static 변수는 특정 파일 내에서만 사용 가능한 지역변수 입니다.
- 프로그램이 실행될 때 생성되지만 해당 파일 내에서만 접근 가능하다는 점에서 extern과 차이가 있습니다.
그럼 static 변수와 extern 변수의 차이는 무엇일까요
1. 범위:
extern 변수는 다른 파일에서 전역변수를 참고할 때 사용하고, static 변수는 해당 파일 내에서만 접근하고 다른 파일에서 참조가 불가능 합니다.
2. 생명주기
extern 변수는 변수가 정의 된 파일에서 할당 된 메모리를 참조합니다. static 변수는 프로그램 실행 시점에 생성되고 종료 시 소멸됩니다.
nullptr과 NULL차이 - nullptr 조건문 사용시 주의사항
'C++' 카테고리의 다른 글
Python과 Go: 미래의 프로그래밍 언어는 어떤 것이 더 유망할까? (2) | 2024.04.21 |
---|---|
[C++/STL] How to find the size, length of a vector (0) | 2024.04.21 |
[C++] nullptr과 NULL차이 - nullptr 조건문 사용시 주의사항 (0) | 2024.03.19 |
C와 C++이 백악관에서 더 이상 사용하지 않게 된 이유 (0) | 2024.03.17 |
[C++] const 의 개념 그리고 포인터 에서의 const (0) | 2022.03.27 |