Я читал другую ветку, где парень спрашивал о книгах по С ++ для начинающих, и один из отвечавших программистов написал это:
Некоторые предупреждения: избегайте всех книг, которые представляют «привет мир» с
#include <iostream.h>
Я открыл свою книгу по C ++ и, конечно же, включил заголовок iostream, как в примере выше.
Почему это плохо? Какие еще указатели следует учитывать при изучении C ++?
Справочная информация: я хорошо знаю C, и я начну изучать C ++ в следующем семестре.
c++
coding-style
code-quality
coding-standards
headers
Даниэль Скокко
источник
источник
cstdio
, а неstdio.h
(последний устарел).<cstdio>
предоставить имена,namespace std
является достаточной причиной, чтобы я предпочел это. Я знаю, что он может также предоставлять их в глобальном пространстве имен так же, как<stdio.h>
и вnamespace std
. Это также вопрос последовательности, если вы делаете привычкой всегда использовать<c…>
заголовки. А для некоторых заголовков вы действительно захотите этого, потому что они расширяют интерфейс C, например, с помощью дополнительных перегрузок функций.Ответы:
Заголовок iostream.h является нестандартным заголовком и существует не на всех платформах. На самом деле он не существует в моей системе (с использованием g ++ и GNU libstdc ++). Поэтому любой код, использующий его, просто не скомпилируется в моей системе.
iostream.h
Заголовок , используемый для быть общим , прежде чем C ++ был первым стандартизирован в 1998 г. Но поскольку стандарт 98 используется<iostream>
вместо<iostream.h>
, последний не опале (нестандартными и все) и больше не поддерживается на всех платформах. Код, который его использует, следует считать нестандартным устаревшим кодом и не переносимым. Книги, которые учат этому, следует считать устаревшими и избегать.источник
#include <iostream.h>
является признаком того, что книга была написана до первого стандарта C ++ в 1998 году (стандартный заголовокiostream
).Проблема в том, что старый код C ++ имеет тенденцию быть написанным способами, которые сегодня считаются плохой практикой. В частности,
std::string
иstd::vector
.close
функций, а не RAII.iostream.h
это не самое плохое, что книга до 1998 года ошибется, но, скорее всего, это будет первое , что книга до 1998 года ошибется.источник
Может быть, это немного запоздало, но для того, чтобы это стоило, на Unix / Linux Linux Box
ls /usr/{local/,}include/c++/*
или аналогичный, в зависимости от вашего макета и путей. Вы можетеgrep
найти нужный заголовок, например:Это влечет за собой поиск,
iostream.h
как и любые другие суперструны.Или запустите
find / -type f -name iostream 2> /dev/null | grep include
илиlocate iostream | grep include
(при условии, что база данных актуальна, в противном случае добавьте предваряющий вызовupdatedb
) - они, тем не менее, будут печатать и не общесистемные включения, поэтому настройте их соответствующим образом Фактический путь включения C ++ легко найти с помощью чего-то вроде:Эквивалентно на Windows и других машинах. Я предполагаю, что идея ясна - такой файл, который
iostream.h
больше не существует в системе, включает путь по умолчанию, но вы все равно можете найти устаревшие дистрибутивы libc ++ сiostream.h
программной ссылкойiostream
или в виде его копии. Так что это не вопрос стиля, а скорее обстоятельств. Вы можете отправить свой собственныйiostream.h
проект, просто убедившись, что он содержится в пути включения, где ваш компилятор ищет<...>
заголовки.источник
Просто сбрасываю мои 2 цента. Я не думаю, что есть корреляция между ".h" и качеством книги. Это незначительная проблема синтаксиса. В те времена это был действительно правильный синтнакс.
Можно ли иметь отличную книгу с iostream.h? да
Возможно ли иметь ужасную книгу с iostream? да
Я бы полагался на отзывы пользователей онлайн (и мой собственный обзор после прочтения), чтобы судить о качестве книги.
источник