Справочные данные по языку C++_____________________________655

11.8.1.3 Оператор передачи управления goto

Оператор goto позволяет прервать обычный поток управления и передать
управление в произвольную точку кода, помеченную специальной меткой. В свое
время при появлении концепции структурного программирования на оператор
goto обрушился поток критики и его применение стало рассматриваться как дур-
ной тон. Действительно, чрезмерно широкое применение goto делает структуру
программы крайне запутанной и затрудняет ее сопровождение. Однако, во многих
случаях стремление обойтись без оператора goto не только не упрощает код, а еще
более его запутывает. Так что этот оператор, безусловно, имеет право на существо-
вание.

Хороший стиль программирования

Без особой нужды старайтесь обходится без применения оператора goto. Однако, не возво-
дите это в принцип. В некоторых случаях применение goto не только не запутывает про-
грамму, но, наоборот, делает ее более понятной и облегчает отладку. Старайтесь размещать
передачу управления и метки, на которые передается управление, недалеко друг от друга и
как следует выделяйте их и снабжайте соответствующими комментариями.

Метка в тексте программы обозначается идентификатором с последующим
двоеточием. Например,

Lbegin:

Метка отмечает точку, в которую передается управление оператором goto.
Метка может располагаться в любом месте блока, как после оператора goto, пере-
дающего на нее управление, так и до этого оператора. Надо только иметь в виду,
что передача управления извне внутрь цикла может приводить к непредсказуе-
мым последствиям, так что таких ситуаций следует избегать.

Метки имеет областью действия функцию. Метки можно использовать всюду в
функции, в которой они появились, но на них нельзя ссылаться вне тела функции.
Метки используются также в структурах switch (как метки case — см. раз-
дел 11.8.1.2).

После метки следует оператор, на который передается управление.

Сам оператор goto имеет форму:

goto метка;

Таким образом, организация работы с операторами goto может выглядеть, на-
пример, так:

goto L1;

second: ...
L1: . . .

if (...) goto L1;

else goto second;

При этом, как видно, можно ссылаться на метки, расположенные после или до
оператора goto.

11.8.2 Операторы циклов

11.8.2.1 Оператор for

Оператор for обеспечивает циклическое повторение некоторого оператора (в
частности, составного оператора) заданное число раз. Повторяемый оператор назы-
вается телом цикла. Повторение цикла обычно определяется некоторой управля-