Подтвердить что ты не робот

<iostream> против <iostream.h> против "iostream.h"

При включении файла заголовка в С++, какая разница между...

1), в том числе .h по сравнению с не включенным .h, когда он обертывает его в < > признаки?

#include <iostream> vs. #include <iostream.h>

2) обертывание имени заголовка в двойных кавычках по сравнению с его упаковкой в ​​< > знаки?

#include <iostream.h> vs. #include "iostream.h"

Спасибо заранее!

4b9b3361

Ответ 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 предназначен для обратной совместимости.