Основной вопрос о включении файла заголовка c ++? - PullRequest
5 голосов
/ 16 апреля 2010

В чем различия между программами ниже 3? - это файл заголовка или стандартная библиотека C ++?

1

#include<iostream>
using namespace std;

int main()
{
        return 0;
}

2

#include<iostream>

int main()
{
        return 0;
}

3

#include<iostream.h>

int main()
{
        return 0;
}

Заранее спасибо.

Ответы [ 4 ]

13 голосов
/ 16 апреля 2010

Что касается создаваемой программы, то разница отсутствует - поскольку в библиотеке iostream нет ссылок на программу, ни одна из библиотек не будет скомпилирована каким-либо интеллектуальным компилятором.

Когда вы #include <iostream>, вы включаете заголовочный файл с объявлениями для стандартной библиотеки iostream. Использование #include <iostream.h> по существу аналогично #include <iostream>, за исключением того, что оно определяет все имена библиотек в глобальном пространстве имен, а не в std:: - это для обратной совместимости с программами, которые использовали исходную версию iostream, который не упал .h. (Версии <iostream.h> также часто не поддерживают широкие символы, а только стандартные char.)

using namespace std; означает, что пространством имен по умолчанию для именных ссылок в текущем файле будет std, которое является пространством имен, используемым большинством стандартных библиотечных функций. Хотя это означает, что вам не нужно ставить префикс перед всеми вызовами стандартной библиотеки с std::, это также означает, что вы должны быть осторожны, чтобы не определять ничего, что перекрывается со стандартными именами библиотек.

3 голосов
/ 28 ноября 2015

Ошибка 3: проблема с заголовочным файлом

Заголовок iostream.h является нестандартным заголовком и существует не на всех платформах. На самом деле он не существует в моей системе (с использованием g ++ и GNU libstdc ++). Поэтому любой код, использующий его, просто не скомпилируется в моей системе.

Заголовок iostream.h имел обыкновение быть распространенным до того, как C ++ был впервые стандартизирован в 1998 году. Но с тех пор, как стандарт 98 использовал <iostream> вместо <iostream.h>, последний вышел из употребления (будучи нестандартным и все) и больше не поддерживается на всех платформах. Код, который его использует, следует считать нестандартным устаревшим кодом и не переносимым. Книги, которые учат этому, следует считать устаревшими и избегать их. 100

2 голосов
/ 16 апреля 2010

iostream - это файл заголовка, в котором содержатся объявления и прототипы, являющиеся интерфейсом к части стандартной библиотеки C ++.

В вашей системе есть файл с именем "iostream" (без расширения), содержимое которого копируется и вставляется (с рекурсивной обработкой #include s) в точку, где вы пишете #include <iostream>.

#include директивы всегда извлекают содержимое заголовочных файлов, они никогда не добавляют «библиотеки». Заголовочные файлы часто содержат объявления и прототипы, которые являются интерфейсом к библиотеке, но сами библиотеки подключаются к вашей программе с помощью компоновщика, а не компилятора. При связывании программы на C ++ компоновщик автоматически присоединит стандартную библиотеку C ++, если вы не скажете ей об этом, поэтому вам не нужно об этом беспокоиться.

Аналогично, оператор using namespace std не выполняет работу по подключению библиотеки. Это утверждение делает так, что вы можете написать, например, cout или string вместо того, чтобы квалифицировать их как std::cout и std::string. Это работает для любого пространства имен, но обычно не рекомендуется.

Для трех приведенных вами примеров все они дают вам определения и прототипы, необходимые для использования части iostream стандартной библиотеки C ++, но (2) предпочтительнее, (1) приемлемо и (3) устарело , (2) дает дополнительное удобство возможности опускать префикс std:: (за счет сокращения имен переменных, доступных для использования вами), и (3) включает в себя другой файл с именем «iostream.h» вместо «iostream», что обычно является одним и тем же, но файл с .h является реликвией предстандартного C ++ и поэтому может не поддерживаться в будущих компиляторах.

1 голос
/ 16 апреля 2010

Первые две программы являются стандартными программами на C ++, тогда как третья программа использует нестандартный заголовочный файл <iostream.h>

В 1-й программе using namespace std выводит все пространство имен std в область действия.

Посмотрите это для получения дополнительной информации.

...