Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
В противоположность этому компьютер действительно глуп. Ему все необходимо точно и подробно описать. Вернемся к инструкциям “по коридору направо, вверх по лестнице, а потом налево”. Где находится коридор? Что такое коридор? Что значит “направо”? Что такое лестница? Как подняться по лестнице? По одной ступеньке? Через две ступеньки? Держась за перила? Что находится слева от меня? Когда это окажется слева от меня? Для того чтобы подробно описать инструкции для компьютера, необходим точно определенный язык, имеющий специфическую грамматику (естественный язык слишком слабо структурирован), а также хорошо определенный словарь для всех видов действий, которые мы хотим выполнить. Такой язык называется языком программирования, и язык программирования С++ — один из таких языков, разработанных для решения широкого круга задач.
Более широкие философские взгляды на компьютеры, программы и программирование изложены в главе 1. Здесь мы рассмотрим код, начиная с очень простой программы, а также несколько инструментов и методов, необходимых для ее выполнения.
2.2. Классическая первая программа
Приведем вариант классической первой программы. Она выводит на экран сообщение.
// Эта программа выводит на экран сообщение "Hello, World!"
#include "std_lib_facilities.h"
int main() // Программы на C++ начинаются с выполнения функции main
{
cout << "Hello, World!n"; // вывод "Hello, World!"
return 0;
}
Этот набор команд, которые должен выполнить компьютер, напоминает кулинарный рецепт или инструкции по сборке новой игрушки. Посмотрим, что делает каждая из строк программы, начиная с самого начала:
cout << "Hello, World!n"; // вывод "Hello, World!"
Именно эта строка выводит сообщение на экран. Она печатает символы Hello, World!, за которыми следует символ перехода на новую строку; иначе говоря, после вывода символов Hello,World! курсор будет установлен на начало новой строки. Курсор — это небольшой мерцающий символ или строка, показывающая, где будет выведен следующий символ.
В языке С++ строковые литералы выделяются двойными кавычками ("); т.е. "Hello, Word!n" — это строка символов. Символ n — это специальный символ, означающий переход на новую строку. Имя cout относится к стандартному потоку вывода. Символы, “выведенные в поток cout” с помощью оператора вывода <<, будут отображены на экране. Имя cout произносится как “see-out”, но является аббревиатурой “haracter put stream” (“поток вывода символов”). Аббревиатуры довольно широко распространены в программировании. Естественно, аббревиатура на первых порах может показаться неудобной для запоминания, но привыкнув, вы уже не сможете от них отказаться, так как они позволяют создавать короткие и управляемые программы.
Конец строки
// вывод "Hello, World!"
является комментарием. Все, что написано после символа // (т.е. после двойной косой черты (/), которая называется слэшем), считается комментарием. Он игнорируется компилятором и предназначен для программистов, которые будут читать программу. В данном случае мы использовали комментарии для того, чтобы сообщить вам, что именно означает первая часть этой строки.
Комментарии описывают предназначение программы и содержат полезную информацию для людей, которую невозможно выразить в коде. Скорее всего, человеком, который извлечет пользу из ваших комментариев, окажетесь вы сами, когда вернетесь к своей программе на следующей неделе или на следующий год, забыв, для чего вы ее писали. Итак, старайтесь хорошо документировать свои программы. В разделе 7.6.4 мы обсудим, как писать хорошие комментарии.
Программа пишется для двух аудиторий. Естественно, мы пишем программы для компьютеров, которые будут их выполнять. Однако мы долгие годы проводим за чтением и модификацией кода. Таким образом, второй аудиторией для программ являются другие программисты. Поэтому создание программ можно считать формой общения между людьми. Действительно, целесообразно главными читателями своей программы считать людей: если они с трудом понимают, что вы написали, то вряд ли программа когда-нибудь станет правильной. Следовательно, нельзя забывать, что код предназначен для чтения — необходимо делать все, чтобы программа легко читалась. В любом случае комментарии нужны лишь людям, компьютеры игнорируют комментарии.
Первая строка программы — это типичный комментарий, которая сообщает читателям, что будет делать программа.
// Эта программа выводит на экран сообщение "Hello, World!"
Эти комментарии полезны, так как по коду можно понять, что делает программа, но нельзя выяснить, чего мы на самом деле хотели. Кроме того, в комментариях мы можем намного лаконичнее объяснить цель программы, чем в самом коде (как правило, более подробном). Часто такие комментарии размещаются в первых строках программы. Помимо всего прочего, они напоминают, что мы пытаемся сделать.
Строка
#include "std_lib_facilities.h"
представляет собой директиву #include. Она заставляет компьютер “включить” возможности, описанные в файле std_lib_facilities.h. Этот файл упрощает использование возможностей, предусмотренных во всех реализациях языках С++ (стандартной библиотеке языка С++).
По мере продвижения вперед мы объясним эти возможности более подробно. Они написаны на стандартном языке С++, но содержат детали, в которые сейчас не стоит углубляться, отложив их изучение до следующих глав. Важность файла std_lib_facilities.h для данной программы заключается в том, что с его помощью мы получаем доступ к стандартным средствам ввода-вывода языка С++. Здесь мы просто используем стандартный поток вывода cout и оператор вывода <<. Файл, включаемый в программу с помощью директивы #include, обычно имеет расширение .h и называется заголовком (header), или заголовочным файлом (header file). Заголовок содержит определения терминов, таких как cout, которые мы используем в нашей программе.
Как компьютер находит точку, с которой начинается выполнение программы? Он просматривает функцию с именем main и начинает выполнять ее инструкции. Вот как выглядит функция main нашей программы “Hello, World!”:
int main() // Программы на C++ начинаются