extern은 외부 소스 파일에 선언된 전역변수, 함수를 사용할 때 사용합니다.
extern은 전역변수가 파일 외부에 있다는 것을 표시만 할 뿐 전역변수 자체를 선언하지는 않습니다. 그래서 메모리를 잡지 않고 링커가 전역변수를 찾아 링크합니다.
num.cpp
int num = 10;
void WriteNum()
{
std::cout << num;
}
main.cpp
extern int num;
extern void WriteNum();
int main()
{
num = 5;
WriteNum();
}
결과
5
static는 해당 파일 안에서만 전역변수로 동작시킬 때 사용합니다.
extern을 이용하여 다른 파일에서도 전역변수에 접근하게 하기 보다 static 키워드를 이용하여 한 파일에서만 전역 변수로 사용하고, 다른 파일에서는 별도의 함수를 이용하여 값을 변경하거나, 얻는 방법이 좋습니다.
num.cpp
static int num = 10;
void WriteNum(int nNum)
{
if(nNum == 0)
std::cout << num << std::endl;
else
std::cout << nNum << std::endl;
}
main.cpp
extern void WriteNum(int nNum);
int main()
{
WriteNum(0);
int num = 5;
WriteNum(num);
}
결과
10
5