2010-06-04 1 views

답변

35

iostream.h은 컴파일러가 제공하지 않으므로 iostream은 C++ 표준의 일부입니다.

명시 적으로 명확히하기 위해 현재 C++ 표준 (INCITS ISO IEC 14882 2003)에는 전혀 언급되어 있지 않습니다. iostream.h

편집 : @ 제리가 언급했듯이, 현재 표준은 언급하지 않았을뿐만 아니라 C++의 표준에도 언급되지 않았습니다.

+0

std 네임 스페이스를 언급해야합니다. – zdan

+0

@ 제리 : 문구를 간직하지만 의미를 분명히 함 –

+0

@ 제리 : 감사합니다. –

10

iostream은 표준 헤더입니다. iostream.h는 표준이 아닌 C++에서 매우 일반적인 비표준 헤더이며 iostream이 진화 한 것입니다. 아마도 오래된 프로그램에서 사용하기 위해 아마도 iostream.h를 사용하는 것이 일반적입니다.

구현에 iostream.h의 작업 복사본이있는 경우 iostream의 모든 항목이 std 네임 스페이스에있는 반면 iostream.h는 일반적으로 네임 스페이스보다 먼저 나오며 일반적으로 사용하지 않는다는 점만 제외하면 iostream과 동일합니다.

구현이 iostream과 iostream.h 모두있는 경우, iostream이 같은 일을 할 가능성이 높습니다 : 그건 반드시이 쓰여 방법은 있지만

namespace std 
{ 
#include <iostream.h> 
} 

.

+1

사실 iostream.h의 스트림은 일반적으로 iostream에있는 것과 같은 템플릿이 아니 었습니다. 단순한 읽기 및 쓰기 (예 : 조작기 작성) 이외에도 많은 차이가있는 경우가 많습니다. –

+0

@Jerry : 네가 맞아.하지만 유감스럽게도 내가 개조해야했던 시스템에 대한 추억을 다시 불러오고있다. 그러나 이것이 반드시 최신 구현에서 iostream.h와 iostream간에 중요한 차이가 있음을 의미하지는 않습니다. 기억한다면 집에 올 때 gcc 구현을 살펴볼 것입니다. –

+1

그래, 내가 왜 다른 곳에서 iostream과 iostream.h 사이의 차이가 크게 달라지는 지 논평했다. 일부에서는 iostream.h가 현재 구현되어 있으며 모든 내용에 대해 'using'선언이 사용됩니다. 다른 경우에는 오래된 구현입니다 (몇 가지 경우에는 ...). –

2

C++을 처음 만들었을 때 표준 런타임 라이브러리의 모든 파일은 .h로 끝납니다. 인생은 일관되었고, 좋았습니다. cout과 cin의 원래 버전은 iostream.h에 살고있었습니다. 언어가 ANSI위원회에 의해 표준화되면 런타임 라이브러리의 모든 기능을 표준 네임 스페이스로 옮기기로 결정했습니다 (일반적으로 좋은 생각입니다). 그러나 이것으로 문제가 발생했습니다. 모든 기능을 표준 네임 스페이스로 옮기면 이전 프로그램이 더 이상 작동하지 않습니다!

이전 프로그램에 대한 이전 버전과의 호환성을 유지하면서이 문제를 해결하기 위해 같은 이름을 사용하지만 .h 확장자가없는 새로운 헤더 파일 집합이 도입되었습니다. 이 새로운 헤더 파일은 std 네임 스페이스 안에 모든 기능을 가지고 있습니다. 이렇게하면 #include <iostream.h>이 포함 된 이전 프로그램을 다시 작성하지 않아도되고 최신 프로그램은 #include <iostream>이 될 수 있습니다.

표준 라이브러리의 헤더 파일을 포함하는 경우, .h가 아닌 버전을 사용하십시오. 그렇지 않으면 더 이상 지원되지 않는 더 이상 사용되지 않는 헤더 버전을 사용하게됩니다.

또한 C++에서 여전히 유용했던 많은 라이브러리에는 c 접두어가 붙습니다 (예 : stdlib.h가 cstdlib가 됨). 이러한 라이브러리의 기능도 이름 지정 충돌을 피하기 위해 std 네임 스페이스로 이동되었습니다.

그러나 헤더 파일을 작성할 때 std 네임 스페이스에 코드를 추가하지 않으므로 .h 확장자를 모두 제공해야합니다.

규칙 : 존재하지 않는 라이브러리의 .h 버전을 사용하고 std 네임 스페이스를 통해 기능에 액세스하십시오. .h가 아닌 버전이 있거나 자신의 헤더를 작성중인 경우 .h 버전을 사용하십시오.