В языке программирования C++ эти директивы выполняют разные, но взаимосвязанные функции: одна отвечает за подключение внешнего кода, а вторая — за удобство обращения к нему. Директива #include Эта команда является директивой препроцессора. Она указывает компилятору (точнее, препроцессору), что перед началом фактической компиляции файла в него нужно буквально «вставить» содержимое другого файла.
- Подключение заголовочных файлов: Чаще всего подключаются файлы с расширением
.hили стандартные библиотеки (например,<iostream>,<vector>,<string>). - Доступ к инструментам: Без этой директивы вы не сможете использовать стандартные функции. Например, чтобы вывести текст на экран, нужно подключить
<iostream>, где содержится объявление объектаcout. - Синтаксис:
#include <filename>— используется для системных и стандартных библиотек (поиск идет в стандартных папках компилятора).#include "filename.h"— используется для пользовательских файлов, созданных программистом (поиск начинается в текущей папке проекта).
Конструкция using namespace std Эта строка относится к управлению пространствами имен (namespaces). Что такое пространство имен? В больших проектах разные программисты могут создать функции с одинаковыми именами. Чтобы не возникало конфликтов, их помещают в разные «контейнеры». Все стандартные инструменты C++ (cout, cin, string, vector и т.д.) находятся внутри «контейнера» под названием std (сокращение от standard). Роль директивы По умолчанию, чтобы вызвать функцию из стандарта, вы должны писать её полное имя: std::cout. Команда using namespace std; говорит компилятору: «Если ты видишь имя, которое тебе не знакомо, загляни в пространство имен std».
- Плюс: Код становится короче. Вместо
std::cout << std::endl;можно писать простоcout << endl;. - Минус (почему это часто считают плохой практикой): Происходит «загрязнение» глобальной области видимости. Если вы случайно создадите свою функцию с именем
coutилиsort, возникнет конфликт имен, и компилятор может выдать ошибку или выбрать не ту функцию.
Наглядный пример Рассмотрим код, где используются оба элемента: cpp
#include<iostream>// Подключаем библиотеку для ввода-выводаusingnamespace std; // Разрешаем не писать "std::" перед командамиint main() { cout << "Hello, World!"; // Работает благодаря обеим строкам вышеreturn0; }