카테고리 없음

[C/C++]extern와 static

DDang goon 2019. 11. 12. 02:08

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