Инструкция goto осуществляет безусловный переход на указанную в программе метку. Метка – это идентификатор C++, за которым поставлено двоеточие. При выполнении goto управление передаётся первой инструкции, которая следует за меткой. Метка должна находиться в одной функции с goto.
Пример использования оператора goto:
#include <iostream>
using namespace std;
void main ()
{
setlocale(LC_ALL, "Russian");
for (int x = 0; x <= 50; x++)
for (int y = 50; y >= 0; y--)
{
if (x-y == 0)
{
cout << "Деление на 0\n";
goto label;
}
cout << (float)1/(x-y) << endl;
}
label:
system("pause");
}
Здесь при попытке деления на 0 выводится предупреждение и происходит выход из вложенного цикла на метку label. Добиться такого же оператором break не получится, т.к. он прерывает только вложенный цикл.
Приведённый пример – выход из вложенных циклов при возникновении ошибки – один из немногих случаев, когда использование оператора goto считается оправданным.
Предостережение! Использованиеоператора goto считается плохим стилем программирования. Доказано, что этот оператор является необязательным, и любая программа может быть написана без него. Использование goto делает программу практически нечитаемой, усложняет её оптимизацию и приводит к нетривиальным и труднообнаруживаемым ошибкам.