'C언어'에 해당되는 글 11건

  1. 2007.02.26 C언어에서 컴파일 시에 전역 변수 영역
2007. 2. 26. 17:54

전역 변수는 프로그램의 내부에서 사용이 가능한 변수로 개념적인 정의를 할 수 있습니다.
하지만 실제 언어를 구현하여 컴파일을 하는 과정에서 조금 달라지게 됩니다.

예를 들어 C언어 인 경우

소스 파일 마다 obj(오브젝트 파일) 을 만들고 각각의 오브젝트 파일을 합쳐 실제 실행 파일을 만들게 되는데 이때 전역변수는 각각의 오브젝트 파일 마다 메모리 공간을 할당 하지 않고 하나에만 할당을 받게 됩니다.

A.c 에서 전역변수 a를 선언하면 a.obj 에만 전역변수 a가 메모리를 할당받음
B.c 소스에서 전역변수 a를 다시 선언하면
링크 과정(오브젝트 파일을 묶어 실행파일을 만드는 과정) 에서
양쪽에 선언된 전역변수 a 가 충돌이 일어납니다.

해결방법은 B.c는 전역변수 a가 이미 선언되었으니 메모리는 할당하지 않고 A.c의 a 를 가져다 쓰게 해야 합니다.
즉 B.c 에서 extern 키워드를 쓰면 할당하지 않고 가져다 쓰게 됩니다.

------------- a.c ---------------

// 전역변수 a의 메모리 할당 (실체화)

int a = 0;

...

------------- b.c ---------------

// 전역변수 a ( 할당은 하지 않고 a.c에 선언된 것(외부)을 가져오기)

extern int a;

'STUDY > C 언어' 카테고리의 다른 글

명령어 이해 - for 문  (0) 2007.03.07
명령어 이해 - #ifdef / #ifndef / #endif  (0) 2007.03.02
명령어 이해 - if / while / brake  (0) 2007.03.02
명령어 이해 - return  (1) 2007.03.02
전역변수 사용시 주의 할 점  (0) 2007.02.26
Posted by Paul Hwang