С.Б. Липпман, Ж. Лажойе - Язык программирования С++ Вводный курс (1114944), страница 5
Текст из файла (страница 5)
Переменная book_count инициализированазначением 0.Вторая инструкция – присваивание. Она помещает в область памяти, отведеннуюпеременнойbook_count,результатсложениядвухдругихпеременных –books_on_shelf и books_on_order. Предполагается, что эти две целочисленныепеременные определены где-то ранее в программе и им присвоены некоторые значения.14С++ для начинающихТретья инструкция является инструкцией вывода. cout – это выходной поток,направленный на терминал, << – оператор вывода. Эта инструкция выводит в cout – тоесть на терминал – сначала символьную константу, заключенную в двойные кавычки("значение переменной book_count: "), затем значение, содержащееся в области памяти,отведенном под переменную book_count.
В результате выполнения данной инструкциимы получим на терминале сообщение:значение переменной book_count: 11273если значение book_count равно 11273 в данной точке выполнения программы.Инструкции часто объединяются в именованные группы, называемые функциями. Так,группа инструкций, необходимых для чтения исходного файла, объединена в функциюreadIn(). Аналогичным образом инструкции для выполнения оставшихся подзадачсгруппированы в функции sort(), compact() и print().В каждой С++ программе должна быть ровно одна функция с именем main(). Вот какint main(){readIn();sort();compact();print();return 0;может выглядеть эта функция для нашего алгоритма:}Исполнение программы начинается с выполнения первой инструкции функции main(), внашем случае – вызовом функции readIn().
Затем одна за другой исполняются вседальнейшие инструкции, и, выполнив последнюю инструкцию функции main(),программа заканчивает работу.Функция состоит их четырех частей: типа возвращаемого значения, имени, спискапараметров и тела функции.
Первые три части составляют прототип функции.Список параметров заключается в круглые скобки и может содержать ноль или болеепараметров, разделенных запятыми. Тело функции содержит последовательностьисполняемых инструкций и ограничено фигурными скобками.В нашем примере тело функции main() содержит вызовы функций readIn(), sort(),compact() и print().
Последней выполняется инструкцияreturn 0;Инструкция return обеспечивает механизм завершения работы функции. Если операторreturn сопровождается некоторым значением (в данном примере 0), это значениестановится возвращаемым значением функции. В нашем примере возвращаемое значение0 говорит об успешном выполнении функции main(). (Стандарт С++ предусматривает,что функция main() возвращает 0 по умолчанию, если оператор return не использованявно.)15С++ для начинающихДавайте закончим нашу программу, чтобы ее можно было откомпилировать и выполнить.Во-первых, мы должны определить функции readIn(), sort(), compact() и print().void readIn() { cout << "readIn()\n"; }void sort() { cout << "sort()\n"; }Для начала вполне подойдут заглушки:void compact() { cout << "compact()\n"; }void print() { cout << "print ()\n"; }Тип void используется, чтобы обозначить функцию, которая не возвращает никакогозначения.
Наши заглушки не производят никаких полезных действий, они тольковыводят на терминал сообщения о том, что были вызваны. Впоследствии мы заменим ихна реальные функции, выполняющие нужную нам работу.Пошаговый метод написания программ позволяет справляться с неизбежными ошибками.Попытаться заставить работать сразу всю программу – слишком сложное занятие.Имя файла с текстом программы, или исходного файла, как правило, состоит из двухчастей: собственно имени (например, bookstore) и расширения, записываемого послеточки.
Расширение, в соответствии с принятыми соглашениями, служит для определенияназначения файла. Файл bookstore.h является заголовочным файлом для С или С++программы. (Необходимо отметить, что стандартные заголовочные файлы С++ являютсяисключением из правила: у них нет расширения.)Файл bookstore.c является исходным файлом для нашей С программы. В операционнойсистеме UNIX, где строчные и прописные буквы в именах файлов различаются,расширение .C обозначает исходный текст С++ программы, и в файле bookstore.Cрасполагается исходный текст С++.В других операционных системах, в частности в DOS, где строчные и прописные буквыне различаются, разные реализации могут использовать разные соглашения дляобозначения исходных файлов С++.
Чаще всего употребляются расширения .cpp и.cxx: bookstore.cpp, bookstore.cxx.Заголовочные файлы С++ программ также могут иметь разные расширения в разныхреализациях (и это одна из причин того, что стандартные заголовочные файлы С++ неимеют расширения). Расширения, используемые в конкретной реализации компилятораС++, указаны в поставляемой вместе с ним документации.Итак, создадим текст законченной С++ программы (используя любой текстовыйредактор):16С++ для начинающих#include <iostream>using namespace std;void readIn() { cout << "readIn()\n"; }void sort() { cout << "sort()\n"; }void compact() { cout << "compact()\n"; }void print() { cout << "print ()\n"; }int main(){readIn();sort();compact();print();return 0;}Здесь iostream – стандартный заголовочный файл библиотеки ввода/вывода (обратитевнимание: у него нет расширения).
Эта библиотека содержит информацию о потоке cout,используемом в нашей программе. #include является директивой препроцессора,заставляющей включить в нашу программу текст из заголовочного файла iostream.(Директивы препроцессора рассматриваются в разделе 1.3.)Непосредственно за директивой препроцессора#include <iostream>следует инструкцияusing namespace std;Эта инструкция называется директивой using.
Имена, используемые в стандартнойбиблиотеке С++ (такие, как cout), объявлены в пространстве имен std и невидимы внашей программе до тех пор, пока мы явно не сделаем их видимыми, для чего иприменяется данная директива. (Подробнее о пространстве имен говорится в разделах 2.7и 8.5.)1После того как исходный текст программы помещен в файл, скажем prog1.C, мы должныоткомпилировать его. В UNIX для этого выполняется следующая команда:$ CC prog1.CЗдесь $ представляет собой приглашение командной строки.
CC – команда вызовакомпилятора С++, принятая в большинстве UNIX-систем. Команды вызова компиляторамогут быть разными в разных системах.Одной из задач, выполняемых компилятором в процессе обработки исходного файла,является проверка правильности программы. Компилятор не может обнаружить1 Во время написания этой книги не все компиляторы С++ поддерживали пространстваимен. Если ваш компилятор таков, откажитесь от данной директивы. Большинствопрограмм, приводимых нами, используют компиляторы, не поддерживающиепространство имен, поэтому директива using в них отсутствует.17С++ для начинающихсмысловые ошибки, однако он может найти формальные ошибки в тексте программы.Существует два типа формальных ошибок:синтаксические ошибки. Программист может допустить “грамматические”, с точкиint main( { // ошибка – пропущена ')'readIn(): // ошибка – недопустимый символ ':'sort();compact();print();return 0// ошибка – пропущен символ ';'зрения языка С++, ошибки.
Например:}ошибки типизации. С каждой переменной и константой в С++ сопоставлен некоторыйтип. Например, число 10 – целого типа. Строка "hello", заключенная в двойныекавычки, имеет символьный тип. Если функция ожидает получить в качестве параметрацелое значение, а получает символьную строку, компилятор рассматривает это какошибку типизации.Сообщение об ошибке содержит номер строки и краткое описание.
Полезнопросматривать список ошибок, начиная с первой, потому что одна-единственная ошибкаможет вызвать цепную реакцию, появление “наведенных” ошибок. Исправление этойединственной ошибки приведет и к исчезновению остальных. После исправлениясинтаксических ошибок программу нужно перекомпилировать.После проверки на правильность компилятор переводит исходный текст в объектный код,который может быть понят и исполнен компьютером.
Эту фазу работы компилятораназывают генерацией кода.В результате успешной компиляции образуется выполняемый файл. Если запуститьвыполняемый файл, полученный в результате компиляции нашей программы, наreadIn()sort()compact()терминале появится следующий текст:print()В С++ набор основных типов данных – это целый и вещественный числовые типы,символьный тип и логический, или булевский. Каждый тип обозначается своимключевым словом. Любой объект программы ассоциируется с некоторым типом.intage = 10;double price = 19.99;chardelimiter = ' ';Например:boolfound = false;18С++ для начинающихЗдесь определены четыре объекта: age, price, delimiter, found, имеющиесоответственно типы целый, вещественный с двойной точностью, символьный илогический.