Найти в Дзене

Статья #5. Разбираем «Hello World» по косточкам #3

Здравствуйте. Сегодня я продолжу исследовать первые две строки программы, которую начал исследовать в моих прошлых статьях. Начну с первой строки. Без этой строки программа не скомпилируется. Если убрать эту строку, то получим ошибку: Почему так происходит? Эта строка не относится к языку C++. Это директива для препроцессора. Директивы в файле исходного кода позволяют препроцессору выполнять определенные действия. Например, препроцессор может вставлять содержимое других файлов в файл исходного кода, удалять комментарии или отключать компиляцию части файла путем удаления разделов текста. Препроцессор – это специальная программа, которая берёт содержимое файла нашей программы и обрабатывает его перед компиляцией. В данном случае #include означает, что препроцессору необходимо вставить на место этой строки содержимое файла iostream. Имя файла указывают двумя способами – в кавычках и угловых скобках. Различие между ними заключается в том, в каком порядке препроцессор ищет файлы

Здравствуйте. Сегодня я продолжу исследовать первые две строки программы, которую начал исследовать в моих прошлых статьях. Начну с первой строки.

-2

Без этой строки программа не скомпилируется. Если убрать эту строку, то получим ошибку:

-3

Почему так происходит?

Эта строка не относится к языку C++. Это директива для препроцессора. Директивы в файле исходного кода позволяют препроцессору выполнять определенные действия. Например, препроцессор может вставлять содержимое других файлов в файл исходного кода, удалять комментарии или отключать компиляцию части файла путем удаления разделов текста.

Препроцессор – это специальная программа, которая берёт содержимое файла нашей программы и обрабатывает его перед компиляцией.

В данном случае #include означает, что препроцессору необходимо вставить на место этой строки содержимое файла iostream. Имя файла указывают двумя способами – в кавычках и угловых скобках. Различие между ними заключается в том, в каком порядке препроцессор ищет файлы заголовков, если путь указан не полностью.

Форма в кавычках:
Препроцессор ищет включаемые файлы в следующем порядке:
1. В том же каталоге, где находится файл с оператором #include.
2. В каталогах открытых в данный момент включаемых файлов (в порядке, обратном тому, в котором они открывались). Поиск начинается в каталоге родительского включаемого файла, а затем выполняется в каталогах всех включаемых файлов-прародителей.
3. По путям, заданным всеми параметрами компилятора /I.
4. По путям, заданным в переменной среды INCLUDE.

Форма с угловыми скобками:
Препроцессор ищет включаемые файлы в следующем порядке:
1. По путям, заданным всеми параметрами компилятора /I.
2. Если компиляция выполняется из командной строки — по путям, которые заданы в переменной среды INCLUDE.

Так почему же всё-таки происходит ошибка? Файл iostream — это заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»). Именно в этой библиотеке и находится наш объект вывода cout и функция endl. А если не подключен iostream, то препроцессор не может понять, что такое cout и endl и соответственно выдает ошибку.

О второй строкой все очень просто. В ней сообщается, что в программе будет использоваться пространство имен std. Именно в это пространство имен и входит cout и endl.

Что такое пространство имен?

Для начала, давайте попробуем понять для чего вообще нужны эти самые пространства имен.

Предположим, у вас есть крупный проект, который содержит огромное количество классов и переменных. Естественно, над ним не будет работать один человек, а значит возможны ошибки из-за, например, создание второго класса с именем Employee (ведь программист может и не знать, что кто-то уже создал класс с таким именем). Программисты называют это коллизиями имен. Чтобы избежать подобных проблем и придумали объединять большие участки кода в пространство имен. Они добавляют своеобразный префикс к каждому идентификатору в данном пространстве.

Эту строку можно исключить из программы, тогда, чтобы не возникало ошибок, необходимо перед cout и endl писать префикс std с двумя двоеточиями:

-4

Программа скомпилируется и запустится без ошибок.

На сегодня все. В следующий раз я продолжу изучение этой одновременно простой и сложной программы.

Программирование для меня — это моё хобби. Написание программ – это отличная практика для развития мышления! Если вы считаете так же тогда ставьте лайк и подписывайтесь на мой блог!