<iostream.h>는 C++의 표준안이 확립되기 전에, 관습처럼 사용되던 표준 입출력 라이브러리의 헤더였습니다. 현재의 C++표준안이 확립된 것은 1998년으로, 최초의 C++표준 문서는 ISO/IEC 14882:1998 이었죠. 따라서, 1998년 이전에 출시된 개발 툴은 관습적으로 <iostream.h>헤더를 포함하여 나왔습니다.



표준안 논의 과정에서 네임스페이스가 포함되고, 모든 표준 라이브러리의 요소를 std 네임스페이스에 넣어야 한다고 결정함에 따라, 기존 헤더에 선언되어 있던 전역 요소들 때문에 더이상 같은 파일이름을 사용해서는 안되는 상황이 된 것이죠. 즉, 어떤 환경에서는 <iostream.h>파일을 포함하면 cout이 std 네임스페이스에 소속되어 있어서 cout 이라는 이름을 사용자가 사용하였는데, 다른 환경에서는 표준 스트림 라이브러리의 cout이 전역에 소속되어 있다면, 당연히 컴파일시 에러를 내겠죠. 이러한 문제 때문에 기존에 사용되던 모든 C++표준 라이브러리에 있던 모든 요소는 std 네임스페이스에 넣고 .h 확장자를 제거하여 헤더를 제공하는 것으로 표준안이 마련되었습니다. 더불어 기존 C 표준라이브러리의 요소 역시 std 네임스페이스에 소속시키고, .h확장자를 제거하고 c접두어를 붙인 헤더에 담아 제공하게 되죠. 즉, <stdio.h> => <cstdio> , <math.h> => <cmath> 와 같은 식의 헤더 역시 기존 C스타일 헤더와 더불어 제공합니다. 물론, C++표준 라이브러리의 헤더는 확장자가 없는 표준 헤더만을 제공하죠.



결론적으로, .h 확장자가 붙는 헤더는 과거, 1998년 이전의 관습을 따르던 것이며, .h확장자가 없는 것이 1998년에 제정된 표준을 따르는 표준 헤더입니다. 이 두 헤더 사이의 결정적인 차이점은, 구성 요소의 이름이 std네임스페이스에 소속되어 있느냐 아니냐의 차이이죠. 표준헤더(<iostream>)는 std 네임스페이스에 선언되어 있으며, 이전의 관습적 헤더(<iostream.h>)는 전역으로 선언되어 있습니다.


<iostream>을 선언하고
using namespace std; 를 사용하면 cin cout을 사용할 수 있다.

<iostream>만 선언할 경우에는 scanf, printf와 같은 함수를 사용할 수 있다.
2006/05/13 23:34 2006/05/13 23:34

덧글을 달아 주세요

  1. 비밀방문자 2008/02/17 22:06 고유주소 고치기 답하기

    관리자만 볼 수 있는 댓글입니다.