헤더파일과 관련된 질문 중 표준헤더의 문제로 인해 혼란을 겪는 경우가 상당히 많은 것 같다.
바로 다음과 같은 문제이다.
#include <iostream.h>
위 소스는 Visual C++ 6.0 에서 컴파일하면 문제없이 컴파일된다. 하지만 Visual C++ .NET 버전에서는 다음과 같이 컴파일 오류가 발생한다.
------ Build started: Project: Test, Configuration: Debug Win32 ------
Compiling...
stdafx.cpp
Compiling...
Test.cpp
d:\temp\test\test\test.cpp(6) : fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory
Build log was saved at "file://d:\Temp\test\Test\Debug\BuildLog.htm"
Test - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
오류의 내용을 보면 iostream.h 헤더파일을 찾을 수 없다는 의미인데 상식적으로 이해가 가지 않을 수 있다. iostream.h 헤더파일은 입출력의 기본이기 때문이다.
원인은 iostream.h 가 표준이 아니라는데 있다. C++ 언어의 표준 Specification 이 제정된 것은 1998년의 일이다. (ISO/IEC 14882:1998) 이 표준이 제정되기 전에는 대부분의 컴파일러들이 .h 확장자가 붙는 형태의 헤더파일을 제공하고 있었으나 1998년 이후에 제작된 컴파일러는 표준 Spec.을 준수하고 있으며 표준헤더인 iostream 을 사용해야 한다.
#include <iostream>
결국 .h 확장자가 붙는 헤더파일은 1998년 이전의 형식을 따른 방식이고(비표준) 확장자가 없는 헤더파일은 제정된 표준을 준수하는 헤더파일인 것이다.
이는 Visual C++ 6.0 과 Visual C++ .NET 이 설치된 디렉토리의 include 폴더를 보면 이해할 수 있다.
다음은 Visual C++ 6.0 버전의 include 폴더이다.
다음은 Visual C++ .NET 버전의 include 폴더이다.
따라서 사용하는 Visual C++ 의 버전에 맞게 적절한 형태를 선택하여 사용할 필요가 있다. 다만 6.0 버전의 경우 iostream.h 헤더파일과 함께 iostream 헤더파일도 제공하므로 어떤 형태를 사용해도 무방하다. 이는 6.0 버전까지는 어떤 형식이 표준이 될지 모르기 때문에 두 방식 모두를 지원해왔지만 .NET 버전부터는 표준이 제정된 상태이므로 표준을 엄격히 적용하는 방향으로 변경이 된 것이라고 보면 될 것이다.
Visual C++ .NET 이 처음 나왔을 때는 이런 문제로 인한 질문이 그다지 많지 않았지만 최근에는 다소 많아지는 느낌이다. 이제서야 Visual C++ .NET 버전의 사용자가 많아진다는 뜻일지도 모를 일이다.
'강좌/도서 > Visual C++' 카테고리의 다른 글
| [Visual C++ Power Tips!] 1. 라이브러리 만들기 - 주요 사이트 링크 (0) | 2011/12/29 |
|---|---|
| 2년전 출간한 책을 꺼내보니... (0) | 2007/08/21 |
| iostream 과 iostream.h 의 차이 - 표준헤더 (0) | 2007/02/11 |
| CString 클래스에 대해 잘 정리된 문서 (0) | 2006/11/23 |
| C/C++ 언어와 API, MFC와의 관계 (2) | 2006/10/18 |
| Visual C++ .NET 실전 프로그래밍 서적 출간 (2) | 2005/12/16 |


