Хотя goto уже давно не рекомендуют использовать, он по-прежнему используется в программах. Мы не будем рассматривать целесообразность его использования с точки зрения элегантности управления программой. Следует заметить, что не существует таких ситуаций, где он был бы единственным решением. Общепринято, что он может быть полезен в некоторых ситуациях, goto используется довольно редко. (В языках типа С, имеющих богатый набор структур управления и предоставляющих дополнительные элементы управления типа break и continue, в нем нет необходимости.) Большинство программистов знают, что goto может легко запутать программу и сделать ее практически нечитабельной. Тем не менее, бывают моменты, когда goto не только не усложняет программу, но даже ее упрощает.
goto требует наличия меток для работы. Метка - это корректный идентификатор С, завершаемый двоеточием. Метка должна находиться в той же функции, что и goto. Например, цикл от 1 до 100 может быть записан с использованием goto и меток следующим образом:
х = 1;
loop1:
х++;
if (х < 100) goto loop1;
Одним из хороших способов использования goto является выход из нескольких уровней вложения. Например:
for(...) {
for (...) {
while (...) {
if (...) goto stop;
...
}
}
}
printf("error in program\n");
Уничтожение goto приведет к необходимости выполнения дополнительных проверок. Простой оператор break здесь не работает, поскольку он может выйти только из самого нижнего цикла.
Если проверяется каждый цикл, то код будет выглядеть следующим образом:
done = 0;
for(...) {
for(...) {
while (...) {
if (...) {
done = 1;
break;
}
...
if(done) break;
}
if(done) break;
}
Следует использовать goto как можно реже. Но если без него код трудно читать или критична cкорость работы программы, то использование goto может быть наилучшим выходом.