<iostream> против <iostream.h> против "iostream.h"
При включении файла заголовка в С++, какая разница между...
1), в том числе .h по сравнению с не включенным .h, когда он обертывает его в < > признаки?
#include <iostream> vs. #include <iostream.h>
2) обертывание имени заголовка в двойных кавычках по сравнению с его упаковкой в < > знаки?
#include <iostream.h> vs. #include "iostream.h"
Спасибо заранее!
Ответы
Ответ 1
Короче:
iostream.h устарел - это оригинальная версия Stroustrup, а iostream - это версия из комитета по стандартам. Как правило, компиляторы указывают на них как на одно и то же, но у некоторых старых компиляторов не будет старшего. В некоторых нечетных случаях они будут существовать и быть разными (для поддержки устаревшего кода), и тогда вы должны быть конкретными.
"" versus < > просто означает проверку локальных каталогов для заголовка перед переходом в библиотеку (в большинстве компиляторов).
-Adam
Ответ 2
Вот достойная ссылка статья.
Подводя итог, приведенная причина:
Версия библиотеки iostream, которую Комитет по стандартам был немного отличался от реализации CFront. {Надрез}
Чтобы облегчить переход, Комитет по стандартам C++ объявил, что код включая стандартные заголовки С++, будут включать в себя директивы include, которые отсутствие расширения. Это позволило поставщикам компилятора отправить старый стиль Заголовки библиотеки С++ с расширением .h и заголовками новых стилей без них.
Преимущество использования версии .h:
Существует несколько причин, по которым новый код должен быть написан с использованием без продолжения версии файлов заголовков вместо форм .h. прежде всего, непредсказуемость такого кода при составлении на современном компиляторы. Как упоминалось ранее, результат использования заголовков .h является спецификой реализации. И со временем вероятность того, что данный компилятор будет иметь доступную библиотеку старого стиля.
Ответ 3
Как человек в комитете по стандартам (X3J16), который предложил отказаться от .h, мое первоначальное намерение состояло в том, чтобы разрешить дебаты по расширениям .h,.H,.hpp,.hxx или .h ++; или желание некоторых, что в стандарте не подразумевается, что это было имя файла на диске, чтобы позволить IDE вытаскивать предварительно скомпилированную информацию заголовка из какого-то внутреннего, как файл ресурсов, или даже кишки компилятор.
В то время как Unix считала, что имя файла является одной строкой и на самом деле не признает концепцию расширения, операционные системы DEC имели традицию ветки имени от расширения и предоставления "расширения по умолчанию", если оно было опущено в конкретных контекстов. То, что я получил идею от того, чтобы оставить ее до реализации, использовать любое расширение, которое хочет реализовать реализация, и это позволило реализации даже не иметь этот файл на диске. (В то время я был депутатом DEC в комитете.)
Дифференциация между стандартным и предстандартным заголовками была дополнительным преимуществом.
Ответ 4
Стандартным способом (и единственным гарантированным для работы) является <iostream> . На gcc, < iostream.h > (который, возможно, должен быть включен как < назад /iostream.h > ), вытягивает соответствующие объявления в глобальное пространство имен (так что вам не нужен префикс пространства std:: namespace).
"iostream.h" будет пытаться сначала из каталога с вашим исходным кодом, так как "предназначен для заголовков вашего проекта. & Л; > всегда должны использоваться для заголовков систем и" " для ваших собственных заголовков.
Ответ 5
Обычно < > используется для системных или стандартных файлов библиотек, тогда как "" используется для файлов проекта. Я не удивлюсь, если ваш компилятор будет искать локально, и когда он не сможет найти его, он по умолчанию соответствует стандартной версии библиотеки.
Что касается .h, я не думаю, что это действительно имеет значение, если вы используете C.
В С++ я смутно помню, что была более новая версия и более старая версия, и что без h она должна была быть новой версией, но я даже не уверен, что старая версия все еще существует.
Ответ 6
Это действительно два разных вопроса.
-
Разница между .h и
неограниченные заголовки с одинаковыми
имя - историческое. Те, у кого есть
расширение .h связано с
оригинальный стандарт С++, который не
имеют некоторые современные функции, такие как
пространства имен и шаблоны. это было
проще для нового стандарта
эта же функциональность в новых
файлы заголовков, чтобы иметь возможность использовать эти
новые функции и сохранить старый (.h)
файлы для обратной совместимости
устаревший код.
-
Разница между #include
<... > и #include "..."
порядок, в котором компилятор
ищет файлы. Это обычно
зависит от реализации, но
идея состоит в том, что формат < > выглядит
Сначала система включает каталоги,
в то время как "" выглядит в том же каталоге
как исходный файл, который # включил его
первый.
Ответ 7
Простой ответ на первый ответ заключается в том, что iostream.h не существует, по крайней мере, в реализации GCC. Если вы находитесь на * nix, введите
% найти iostream.h
/USR/включать/С++/3.4.3/назад/iostream.h
и
% найти iostream
/usr/include/c++/3.4.3/iostream
/USR/включать/С++/3.4.3/назад/iostream.h
Как говорится в статье Zee, iostream.h предназначен для обратной совместимости.