|
using namespace std; 가 무엇인가에 대한 질문이 아니라
이 문장이 기본적으로 포함되게 됨에도 불구하고 Builder 에서 반드시 소스코드에 새로 저 문장을
강제적으로 추가시키게 하는게 이상하다는 거였습니다.
아니면 충분히 설명해주신건데 제가 못 알아들은건지;
제가 허접이라 잘 못알아들은 것이면 너그러이 용서를..
다시 설명해보겠습니다.
다음은 <iostream> 이고
//---------------------------------------------------
#ifdef _USE_OLD_RW_STL
# include <oldstl\iostream.h>
#else
# include <stlport\iostream>
/* Define __STD_IOSTREAM__ here to cause sysclass.h to define
VCL_IOSTREAM which causes certian iostream operators to get defined
*/
#define __STD_IOSTREAM__
#endif
#if !defined(__USING_STD_NAMES__) && defined(__cplusplus)
using namespace std;
#endif /* __USING_STD_NAMES__ */
//----------------------------------------------------
이거는 hello.cpp 라고 하면
//----------------------------------------------------
#include <iostream>
int main()
{
cout << "Hello" << endl;
return 0;
}
//----------------------------------------------------
hello.cpp 는 컴파일시에 전처리기에 의해 다음과 같이 될것입니다.
//----------------------------------------------------
# include <stlport\iostream>
#define __STD_IOSTREAM__
using namespace std;
int main()
{
cout << "Hello" << endl;
return 0;
}
//----------------------------------------------------
_USE_OLD_RW_STL
이건 Builder6 에선 정의되지 않을테고
__cplusplus
이건 당연히 정의되겠고
__USING_STD_NAMES__
이건 using namespace std; 구문 포함 확인 매크로일테구요
결론적으로
#if !defined(__USING_STD_NAMES__) && defined(__cplusplus)
using namespace std;
#endif /* __USING_STD_NAMES__ */
이 구문이 긍정이 되면서 using namespace std; 문장이 포함되게 됩니다.
실제로 <iostream> 내용을 그대로 복사해서 File1.h 를 만든다음
이것을 hello.cpp 에 #include 추가한 후 실행하면 당연히 using namespace std;
없이도 실행이 됩니다.
그런데 유독 <iostream> 만 저 구문이 효력이 없느냐는거죠.
혹시나 해서 프로젝트 옵션들에서 c++ 문법 강화 같은 것들을 찾아보았는데 없는 것 같더군요.
정말 궁금한건데 왜 그런지 모르겠군요.
아니면 제가 뭔가 치명적이고 중대한 사실을 알지 못하고 있는것인지..
아직 초보라 그럴 가능성도 많을 것 같은데;;
그럼.. 답변이 올라오길 기다리면서..
감사합니다.
|