#include <iostream.h>가 왜 나쁜가요?


47

나는 남자가 초보자를위한 C ++ 책에 대해 물었던 또 다른 스레드를 읽고 있었고 , 프로그래머 중 한 명이 이것을 썼습니다.

몇 가지 경고 : "hello world"를 나타내는 모든 책을 피하십시오

#include <iostream.h>

나는 C ++ 책을 열었고 위의 예와 같이 iostream 헤더가 충분히 포함되어 있는지 확인하십시오.

왜 나쁜가요? C ++을 배울 때 고려해야 할 다른 사항은 무엇입니까?

배경 : 저는 C에 능숙하며 다음 학기에는 C ++를 배우기 시작할 것입니다.


3
관련된 또 다른 포인터는 포함 cstdio하지 않는 것입니다 stdio.h(후자는 더 이상 사용되지 않습니다).
Anton Golov

7
@AntonGolov 의견이 다릅니다. <cstdio>를 선호해야하는 기술적 이유 가 없기 때문에 많은 전문가들이 <stdio.h>를 선호합니다.
Sjoerd

2
@Sjoerd <cstdio>이름을 제공한다고 보장 되는 사실 은 namespace std내가 그것을 선호하기에 충분한 이유입니다. 나는 그것이 수 있음을 알고 글로벌 네임 스페이스 단지로 제공 <stdio.h> 할 수 그들을 제공 namespace std. 항상 <c…>헤더를 사용하는 습관을 들이게하는 것도 일관성 문제입니다 . 그리고 일부 헤더의 경우 추가 기능 과부하로 C 인터페이스를 향상시키기 때문에 실제로 원할 것입니다.
5gon12eder

답변:


58

헤더 iostream.h는 비표준 헤더이며 모든 플랫폼에 존재하지는 않습니다. 사실 내 시스템에는 존재하지 않습니다 (g ++ 및 GNU libstdc ++ 사용). 따라서 그것을 사용하는 코드는 단순히 내 시스템에서 컴파일되지 않습니다.

iostream.hC ++가 먼저 1998 년에 표준화되기 전에 사용 된 헤더는 일반적으로하지만, 사용되는 98 표준 때문에 <iostream>대신에 <iostream.h>, 후자는 호의에서 떨어졌다 (인 표준이 아닌 모든) 더 이상 모든 플랫폼에서 지원되지 않습니다. 이 코드를 사용하는 코드는 비표준 레거시 코드로 간주해야하며 이식성이 없습니다. 그것을 가르치는 책은 구식이며 피해야합니다.


14
나는 사소한 전 처리기 구문 문제로 인해 책을 완전히 피하지 않을 것입니다. 훌륭한 책이 될 수 있지만 끔찍한 책은 현대 구문을 사용할 수 있습니다.
Tydus 군

21
@Lord Tydus 98 권 이전의 책 훌륭한 책이 수 있다는 사실은 통계적으로 98 권 이전의 책을 피하는 것이 더 나을 것이라는 사실을 부정하지 않습니다.
Mike Nakis

12
@LordTydus : 완전히 동의하지 않습니다. C ++의 스타일과 사용법은 98과 같지 않으므로 구문 문제 만 수정하는 것이 아닙니다.
Martin York

7
@LordTydus 이전 구문이 평범하고 현대 컴파일러에서 단순히 컴파일되지 않는 경우 이전 구문을 가르치는 책을 사용하면 어려움을 겪을 수 있습니다. iostream.h의 사용법을 가르치는 모든 책은 네임 스페이스를 가르치지 않습니다. 따라서 iostream.h를 iostream으로 바꾼 후에도 코드가 작동하지 않습니다. 이 책에서 예제를 컴파일 할 때마다 Google에 도움을 요청하거나 SO에 대해 도움을 요청해야한다면 C ++을 배우는 효과적인 방법이 아닙니다.
sepp2k

3
@LordTydus : 일반적으로, 이와 같은 헤더를 사용하는 책은 나쁜 관행을 사용하는 경향이 있으며 오류가 수수께끼 인 것으로 나타났습니다. 나는 그런 책 을 배포하지 않기
greyfade

55

#include <iostream.h>이 책은 1998 년 첫 C ++ 표준 (표준 헤더는 iostream) 이전에 작성되었다는 표시입니다 .

문제는 오래된 C ++ 코드가 오늘날 나쁜 습관으로 간주되는 방식으로 작성되는 경향이 있다는 것입니다. 특히,

  • std::stringand 같은 컨테이너 클래스 대신 C 스타일 배열을 사용 std::vector합니다.
  • closeRAII 대신 명시 적 함수 사용 .

iostream.h하지 않 최악의 사전 1998 책이 오해 할 일이 있지만이 될 가능성이 높습니다 먼저 사전 1998 책이 잘못 얻을 것이다 것.


14
당신의 마지막 단락으로 그것을 못 박았습니다.
Monica와의 가벼움 경주

1

어쩌면 이것은 약간 늦었지만 유닉스 / 리눅스 상자에서 ls /usr/{local/,}include/c++/*또는 그와 비슷한 방식으로 레이아웃과 경로에 따라 그만한 가치가 있습니다. 다음 grep과 같이 문제의 헤더 를 찾는 것으로 파이프 할 수 있습니다 .

ls /usr/{local/,}include/c++/* | grep iostream 

이것은 iostream.h다른 수퍼 스트링뿐만 아니라 룩업을 수반합니다 .

또는 실행 find / -type f -name iostream 2> /dev/null | grep include하거나 locate iostream | grep include(데이터베이스가 최신 상태 인 경우에는을 호출하여 추가 updatedb)-시스템 전체가 아닌 포함도 인쇄하므로 적절하게 조정하십시오. 실제 C ++ 포함 경로는 다음과 같이 쉽게 찾을 수 있습니다.

g++ -v 2>&1| sed -rn 's/.+gxx-include[^=]+=([^ ]+).+/\1/p' # adjust iff empty

Windows 및 기타 시스템에서도 동일합니다. iostream.h시스템에 존재하지 않는 파일은 더 이상 기본적으로 경로를 포함하지만 더 이상 iostream.h소프트 링크 iostream또는 복사본으로 레거시 libc ++ 배포판을 찾을 수 있습니다 . 따라서 이것은 스타일의 문제가 아니라 상황의 문제입니다. 당신은 자신을 배송 할 수 iostream.h단지는 컴파일러가 가입 보이는 포함 경로에 포함되어 있는지 확인해 프로젝트와 <...>헤더.


1
매우 실용적이지만 실제 기본 요점을 실제로 다루지는 않습니다.
Monica와의 가벼움 경주

-1

내 2 센트 만 떨어 뜨려 ".h"와 책의 품질 사이에는 상관 관계가 없다고 생각합니다. 이것은 사소한 구문 문제입니다. 당시에는 실제로 올바른 sytnax였습니다.

iostream.h로 훌륭한 책을 가질 수 있습니까? 예

iostream으로 끔찍한 책을 가질 수 있습니까? 예

나는 책의 질을 판단하기 위해 온라인 사용자 리뷰 (그리고 읽은 후 나의 리뷰)에 의존 할 것이다.


3
문제는 당신이 책을 "하루에 다시"원하십니까?
hugomg

5
Lisp는 1958 년 이후로 오래 되었습니까? 우리는 수학이 수천 년이되었지만 모든 현대 미사일 시스템에서 피타고라스의 작업을 활용합니다. 현재 C ++ 서적 시장에서 ".h"서적은 끔찍할 수 있습니다. 그러나 ".h"문제가 아니라 책의 품질 문제입니다. ".h"는 프로그래밍 로직이 아니라 전 처리기입니다.
Lord Tydus

4
하지만 처음으로 언어를 배우는 사람이 책에서 언제 잘못을 말하고 있는지 알 수 있습니까? ".h"가 이제 부정확하다는 것을 알기 전에 얼마나 많은 시간과 좌절을 겪게 될까요? 그리고 그 책이 구식이되는 다른 방법은 몇 가지입니까?
Chris Pitman

23
문제는 그 책들이 쓰여진 이후로 C ++의 사용법이 크게 바뀌 었다는 것입니다. 여러분이 생각하고 C ++을 사용하는 전체적인 방식은 현대 C ++의 기능이 없기 때문에 해당 책이 제시하는 것과 동일하지 않습니다. 결과적으로 C ++이 아닌 클래스로 C를 가르치게됩니다.
Martin York

3
@Giorgio : 지루합니다. ACRE는 어떻습니까? 리탈린 고급 C 예외. 에이커는 또한 많은 근거를 다룬다는 것을 암시합니다. :-)
Martin York
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.