7.1 – Введение в порядок выполнения программы
Когда программа запускается, CPU начинает выполнение с начала main()
, выполняет какое-то количество инструкций (по умолчанию в последовательном порядке), а затем, в конце main()
, программа завершается. Конкретная последовательность инструкций, выполняемых процессором, называется путем выполнения программы (или, для краткости, просто путем).
Рассмотрим следующую программу:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x{};
std::cin >> x;
std::cout << "You entered " << x;
return 0;
}
Путь выполнения этой программы включает в себя строки 5, 7, 8, 10 и 12 в указанном порядке. Это пример прямолинейной программы. Прямолинейные программы при каждом запуске проходят один и тот же путь (выполняют одни и те же инструкции в одном и том же порядке).
Однако часто это не то, что нам нужно. Например, если мы просим пользователя ввести данные, а пользователь вводит что-то недопустимое, в идеале мы хотели бы попросить пользователя сделать другой выбор. В прямолинейной программе это невозможно. На самом деле, пользователь может неоднократно вводить недопустимые данные, поэтому, сколько раз нам может потребоваться попросить его сделать другой выбор, будет неизвестно до времени выполнения.
К счастью, C++ предоставляет ряд различных инструкций управления порядком выполнения, которые представляют собой инструкции, которые позволяют программисту изменять обычный путь выполнения программы. Вы уже видели пример этого с инструкциями if
(представленными в уроке «4.10 – Знакомство с инструкциями if
»), которые позволяют нам выполнять инструкцию, только если условное выражение истинно.
Когда инструкция управления порядком выполнения вызывает изменение точки выполнения на инструкцию, не идущую последовательно, это называется ветвлением.
Категории инструкций управления порядком выполнения программы
Категория | Значение | Реализовано в C++ с помощью |
---|---|---|
Условные операторы | Условные операторы вызывают выполнение последовательности кода, только если выполняется какое-то условие. | if , switch |
Переходы | Переходы говорят процессору начать выполнение инструкций в каком-то другом месте. | goto |
Вызовы функций | Вызов функции – это переход в другое место, а затем обратно в исходную точку. | вызовы функций |
Циклы | Циклы говорят программе многократно выполнять некоторую последовательность кода ноль или более раз, пока не будет выполнено какое-либо условие. | while , do -while , for , for на базе диапазона |
Остановки | Остановки говорят программе о прекращении работы. | std::exit() , std::abort() |
Исключения | Исключения – это особый вид структуры управления порядком выполнения, предназначенный для обработки ошибок. | try , throw , catch |
В данной главе мы подробно рассмотрим все эти категории, за исключением исключений (ха!), которым мы посвятим целую главу (глава 20).
До этой главы количество вещей, которые вы могли сделать с помощью программ, было довольно ограниченным. Возможность контролировать ход выполнения вашей программы (особенно с помощью циклов) делает возможным множество интересных вещей! Вы больше не будете ограничены игрушечными программами и учебными упражнениями – вы сможете писать программы, которые действительно полезны.
Здесь начинается самое интересное. Итак, приступим!