C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[27593] Re:iostream 헤더에..
임문환.실업자 [origin] 977 읽음    2003-10-20 23:26
cele 님이 쓰신 글 :
: 밑부분에 보면
:
: #if !defined(__USING_STD_NAMES__) && defined(__cplusplus)
: using namespace std;
: #endif /* __USING_STD_NAMES__ */
:
: 이렇게 정의 되어 있는데요,
: 실제로 <iostream> 을 불러다 쓸때
:
: using namespace std;
:
: 이걸 안쓰면 안되는게 이해가 안되거든요.
: 전처리 조건도 분명 맞는데.. 왜 그럴까요?


#if !defined(__USING_STD_NAMES__) && defined(__cplusplus)
using namespace std;
#endif /* __USING_STD_NAMES__ */
에서
__cplusplus는 정의되어 있는 것으로 치면 __USING_STD_NAMES__가 문제가 되는군요.

#include<iostream>을 하면 iostream.h 파일이 include 되기는 하는데
위의 #if에 접어들었을 때 __USING_STD_NAMES__가 이미 define 되어 있습니다.
따라서, using namespace std;가 활성화되지 않습니다.
(iostream.h가 include 되는지 여부는 iostream.h 파일에 문법 오류를 만들어 놓고 컴파일해보면 압니다)

한편, #include<iostream.h>를 하게 되면
위의 #if에 접어들었을 때 __USING_STD_NAMES__가 define 되어 있지 않은 상태입니다.
따라서, using namespace std;가 활성화됩니다.

이것을 알았으면 이제 __USING_STD_NAMES__를 언제 어디에서 왜 define하는지를 찾아보아야 겠습니다.

그런데, 이상한 것은 include 이하 디렉터리의 파일들에서 #define __USING_STD_NAMES__를 아무리 찾아봐도 안 보이네요.

#include<iostream>에서와 같이 확장자가 없는 헤더 파일을 지정하면 빌더가 중간에서 암시적으로 어떤 처리를 하는 것이라 추측이 됩니다만....

실험:
1. test_hdr.h , test_hdr 두 파일 모두 없는 상태에서
#include<test_hdr>하면 test_hdr.h 파일이 없다는 컴파일 오류 메시지가 뜸.
2. include 디렉터리에 test_hdr.h 파일을 새로 만들어 놓고(빈 파일)
#include<test_hdr> 하면 컴파일 오류 안 뜨고 __USING_STD_NAMES__가 자동으로 정의된 상태.
#include <test_hdr.h> 하면 컴파일 오류 안 뜨고 __USING_STD_NAMES__가 정의 안 된 상태.

위의 테스트에서 test_hdr 파일은 아예 만들지 않았습니다.

결과적으로,
1. #include<hdr_file> 형식으로 하면 __USING_STD_NAMES__가 자동으로 정의된 후 hdr_file.h 파일을 include하게 되고
2. #include<hdr_file.h> 형식으로 하면 __USING_STD_NAMES__가 자동으로는 정의되지 않고 hdr_file.h 파일을 include하게 된다는 것을 알 수 있습니다.



+ -

관련 글 리스트
27581 iostream 헤더에.. cele 928 2003/10/20
27593     Re:iostream 헤더에.. 임문환.실업자 977 2003/10/20
27596         명쾌한 답변 정말 감사드립니다. cele 777 2003/10/21
27582     Re:iostream 헤더에.. 김백일.cedar 933 2003/10/20
27586         제 질문은 그게 아니었습니다. cele 743 2003/10/20
27588             뭔가 착각하신듯... 김백일.cedar 779 2003/10/20
27592                 잘못 알고 계시는 것 같습니다만.. cele 956 2003/10/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.