:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/09/09 02:23
extern 은, 모든 파일에서 동일한 변수에 접근하고 싶을 때 사용합니다.
대충 예를 들면... aaa.h -> extern int x; aaa.cpp -> int x = 10; bbb.cpp -> #include <aaa.h>; ... printf( "%d", x ); 이렇게 하면, bbb.cpp에 구현된 printf 문에서는 x가 10으로 제대로 출력됩니다.
08/09/09 02:32
그러면 extern int x가 aaa.cpp에 선언 되어있으면 어떻게 하나요? aaa.h에는 extern에 관련된 내용이 전혀 없구요.
그래도 bbb.cpp에서 x를 쓸 수 있나요?? 그리고 #define _NAME_H_ 이런 소스가 있으면 무슨 기능을 하나요? 보통 #define a 10; 이렇게 되 있으면 소스에서 a를 10으로 치환하잖아요? 인터넷 찾아보니 달랑 #define _NAME_H_ 만 있으면 정의만 하고 치환은 되지 않는다는데 그럼 정의는 왜 하는건지...
08/09/09 03:53
변수를 사용하기 위해서는 그 변수가 선언이 되어 있어야 합니다.
따라서 extern int x가 aaa.cpp에만 선언이 되어 있고 bbb.cpp에선 아무런 선언이 없다면 bbb.cpp에서는 x를 사용할 수 없습니다. extern int x와 int x의 차이는 그 변수를 위한 메모리 공간을 할당하느냐의 차이입니다. 실제로 aaa.cpp와 bbb.cpp 둘다 extern int x로 선언을 해도 둘 다 compile 하는데는 아무런 문제가 없습니다. 단지, 나중에 link할때 x변수를 위해 할당된 공간이 없기 때문에 x 변수를 찾을 수 없다는 에러가 나오게 되죠. 반대로 aaa.cpp와 bbb.cpp 둘다 int x로 선언을 하는 경우에는 x 변수가 중복되어 메모리가 할당되기 때문에 link시에 중복된 x변수를 발견했다는 에러가 나옵니다. #define _NAME_H_ 는 치환을 위한 용도가 아니라 다른 목적으로 사용합니다. 보통 #ifdef 라는 구문과 함께 자주 사용하는데요. #ifdef _NAME_H_ [구분] #endif 로 되어 있으면 _NAME_H_가 define 되어 있는 경우에만 [구분] 부분을 compiler가 해석을 합니다. 이는 주로 동일한 헤더파일이 중복되어서 include 되는 경우에 동일한 내용이 두번 이상 해석되는 것을 막기 위해 사용합니다.(일반적으로 header 파일을 작성할때는 '반드시' 해 주어야 할 coding 규칙 중에 하나이죠.)
|