PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/09/09 02:19:45
Name Haru
Subject C언어 extern 관련 문제 <고수님들 부탁드려요.>
extern이 다른 파일에 있는 광역변수?를 가져와서 쓸 수 있는 것인가요? 다른 파일에서 가져갈 수 있게 선언해 놓는 건가요??
예를 들어 1. 다른 파일에 있는 변수 A가 있다고 하면 그 A를 쓸 때 extern A 이렇게 써서 쓰는 건가요? 아니면 2. extern A가 선언이고, 다른 파일에서 A = NULL 이렇게 가져가서 쓰는 건가요? 1번이 맞나요? 2번이 맞나요?
그리고 extern을 xxx.h라는 헤더파일에 선언한다고 하던데 xxx.cpp에서 변수를 쓸 때 ooo.cpp에 선언해 놔도 상관없는 건가요?
어디에 선언해도 상관없다면 만약 ooo.cpp에 선언되어 있으면 xxx.cpp에서 쓸 때 #include <ooo.cpp> ?????? 이렇게 하나요?
include를 시키는 헤더 파일에 선언해야 되는거 아닌가요???
설명이 복잡해서 이해 하시기 힘드시겠지만 부탁드립니다.

통합규정 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 규칙 중에 하나이죠.)
08/09/09 04:01
수정 아이콘
대충 감이 잡히네요. AhnGoon님, 졍님 늦은 시간에 답변 감사드립니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
41904 급전이 필요해서 그런데요~ [12] 껀후이2070 08/09/09 2070
41903 orcad 질문입니다 (pspice) 키라야마토2467 08/09/09 2467
41902 빛의 굴절에 대한 질문 [5] 타우τ1955 08/09/09 1955
41901 신자유주의의 입장을 일목요연하게 정리한 글 [3] 김솔직1916 08/09/09 1916
41900 이번 올스타전 이제동과 이영호선수의 경기 어디서 볼 수 있나요..? [2] 완성형폭풍저1826 08/09/09 1826
41899 자동차관련 영어질문이요.. [2] funnyday1866 08/09/09 1866
41898 ICCup에 /transfer 라는 기능이 있나요? [4] 공유2130 08/09/09 2130
41897 멜로디가 좋은 가요 추천해 주세요 [2] 허접플토2149 08/09/09 2149
41896 [영어]간단한 질문입니다. [10] HitheRoad1837 08/09/09 1837
41895 컴퓨터 고수님들 계신가요?? [7] 무조건한놈만1929 08/09/09 1929
41894 프린터 추천 부탁드립니다. ^^; [4] 기용패트리2100 08/09/09 2100
41893 에라이 모르겠다식의 마인드를.. [8] 아레스2083 08/09/09 2083
41890 노트북 구입하려고 하는데, 추천 좀 부탁드리겠습니다. [10] LegNa.schwaRz1656 08/09/09 1656
41889 영화 '고양이를 부탁해' 대사에 관한 질문입니다. [2] 박진호2498 08/09/09 2498
41888 iptv에 관해 질문이 있습니다. [5] 행복하게살자2124 08/09/09 2124
41887 오래된 그래픽 카드에 대한 질문입니다.. [7] OrBef1759 08/09/09 1759
41886 새 폰 추천과 DMB에 관한 질문입니다. [6] MayBe1731 08/09/09 1731
41885 C언어 extern 관련 문제 <고수님들 부탁드려요.> [4] Haru2301 08/09/09 2301
41883 오일러의 수 e를 구하는 프로그램에 대한 질문... [7] EZrock3306 08/09/09 3306
41882 위에좋은음식좀 알려주세요! [4] Jess:D1835 08/09/09 1835
41881 [야구] 안타 vs 범타 [13] kikira2189 08/09/09 2189
41880 야구관련 질문 드립니다. [9] Third1529 08/09/09 1529
41879 가을에는 코디를 어떻게 하면 좋을까요?? [2] 나를찾아서2116 08/09/09 2116
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로