Gdy program jest uruchomiony, procesor rozpoczyna wykonywanie od góry main(), wykonuje pewną liczbę instrukcji (domyślnie w kolejności sekwencyjnej), a następnie program kończy się na końcu main(). Specyficzna sekwencja instrukcji wykonywanych przez CPU nazywana jest w skrócie wykonania programu (lub ścieżką programu).
Rozważ następujący program:
#include <iostream>
int main()
{
std::cout << "Enter an integer: ";
int x{};
std::cin >> x;
std::cout << "You entered " << x << '\n';
return 0;
}Ścieżka wykonania tego programu obejmuje linie 5, 7, 8, 10 i 12, w tej kolejności. To jest przykład program liniowy. Programy proste idą tą samą ścieżką (wykonują te same instrukcje w tej samej kolejności) za każdym razem, gdy są uruchamiane.
Jednak często nie jest to to, czego pragniemy. Na przykład, jeśli poprosimy użytkownika o wprowadzenie danych, a on wprowadzi coś nieprawidłowego, w idealnym przypadku chcielibyśmy poprosić go o dokonanie innego wyboru. Nie jest to możliwe w programie liniowym. W rzeczywistości użytkownik może wielokrotnie wprowadzać nieprawidłowe dane, więc ile razy będziemy musieli poprosić go o dokonanie kolejnego wyboru, nie będziemy wiedzieć aż do czasu wykonania.
Na szczęście C++ udostępnia wiele różnych instrukcji przepływu sterowania (tzw instrukcji kontroli przepływu), które są instrukcjami umożliwiającymi programiście zmianę normalnej ścieżki wykonywania programu. Widziałeś już tego przykład z instrukcjami if (wprowadzonymi w lekcji 4.10 - Wprowadzenie do instrukcji if), które pozwalają nam wykonać instrukcję tylko wtedy, gdy wyrażenie warunkowe jest prawdziwe.
Kiedy instrukcja przepływu sterowania powoduje zmianę punktu wykonania na instrukcję niesekwencyjną, nazywa się to rozgałęzianiem.
Kategorie kontroli przepływu instrukcje
| Kategoria | Znaczenie | Zaimplementowane w C++ przez |
|---|---|---|
| Instrukcje warunkowe | Powoduje wykonanie sekwencji kodu tylko wtedy, gdy spełniony jest jakiś warunek. | Jeśli w przeciwnym razie przełącznik |
| Jumps | Nakazuje procesorowi rozpoczęcie wykonywania instrukcji w pewnym momencie inna lokalizacja. | goto, przerwa, kontynuacja |
| Wywołania funkcji | Przeskok do innej lokalizacji i z powrotem. | wywołania funkcji, powrót |
| Pętle | Powtarzanie wykonywania sekwencji kodu zero lub więcej razy, aż spełniony zostanie jakiś warunek. | podczas, do-while, for, ranged-for |
| Zatrzymania | Zakończ program. | std::exit(), std::abort() |
| Wyjątki | Specjalny rodzaj struktury kontroli przepływu przeznaczony do obsługi błędów. | spróbuj, rzuć, złap |
Wszystkie te kategorie omówimy szczegółowo w tym rozdziale, z wyjątkiem wyjątków (ha) któremu poświęcimy cały przyszły rozdział (rozdziale 27).
Przed tym rozdziałem liczba rzeczy, które można zrobić za pomocą programu, była dość ograniczona. Możliwość kontrolowania przebiegu programu (szczególnie za pomocą pętli) umożliwia wiele interesujących rzeczy! Nie będziesz już ograniczony do programów zabawek - będziesz mógł pisać programy, które mają naprawdę użyteczność.
Tutaj zaczyna się prawdziwa zabawa. Przejdźmy więc do rzeczy to!

