C++ 컴파일하기...
안녕하세요.
이제 C++을 공부해보려고 하는데 컴파일할때 궁금한점이 있어서 질문 올립니다.
간단한 소스
#include <iostream>
int main()
{
cout << "Hello World!!!" << endl;
return 0;
}
를 g++로 컴파일하면
hello.C: In function `int main()':
hello.C:5: `cout' undeclared (first use this function)
hello.C:5: (Each undeclared identifier is reported only once for each function
it appears in.)
hello.C:5: `endl' undeclared (first use this function)
이런 에러메세지가 나옵니다.
근데 위의 소스코드를 조금 고쳐서
#include <iostream.h> // 헤더파일명에 .h 를 추가
int main()
{
cout << "Hello World!!!" << endl;
return 0;
}
g++로 다시 컴파일하면
In file included from /usr/include/c++/3.2/backward/iostream.h:31,
from hello.C:1:
/usr/include/c++/3.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
이런 메세지가 뜨면서 실행파일은 만들어집니다.
다른 유사한 질문이 있어서 검색해 봤는데 <X.h>는 오래된 표준이니 새 표준형식 <X>로 고치란 뜻이라는 건 알았는데...왜 새표준형식에서는 실행파일이 안만들어지고 오래된 표준형식에서 실행파일이 만들어질까요?
컴파일환경은 gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7) 입니다.
읽어주셔서 감사합니다.
http://bbs.kldp.org/viewtopic.php?t=2261
http://bbs.kldp.org/viewtopic.php?t=22611&highlight=namespace
namespace
옛날에 본 내용이라 기억이 가물가물 하네요.
C++에서는 C와 겹쳐지는 함수 이름들을 위해
#include에 새로운 형식을 사용합니다.
#include <iostream> 처럼 .h를 생략하고 사용하죠.
그리고, namespace라는 것을 이용합니다.
C에서 사용하던 헤더 화일들에는 c를 앞에 붙입니다.
예로,
#include <stdio.h> 의 경우에는
C++을 위해선 #include <cstdio>로 표기하는 것이 맞습니다.
물론, C와의 호환을 위해 <stdio.h>로도 사용이 가능합니다.
위의 코드를 제대로 고쳐 보면,
또는,
이렇게 해야합니다.
댓글 달기