Основной вопрос на включении заголовочного файла C++?

Каковы различия между ниже 3 программ?. <Действительно ли iostream> является заголовочным файлом или библиотекой стандарта 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;
}

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

5
задан Tyler McHenry 16 April 2010 в 14:24
поделиться

3 ответа

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

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

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

13
ответ дан 18 December 2019 в 08:27
поделиться

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

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

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

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

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

2
ответ дан 18 December 2019 в 08:27
поделиться

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

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

См. this для получения дополнительной информации.

1
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: