Dmitry__, в контроллере выполнение всех инструкций это сплошные переходы, как минимум к следующей инструкции.
когда используется для пропуска куска кода, допустим идут какие-то проверки на подобии
- Код: Выделить всё • Развернуть
if (State != STATE_READY)
{
errorcode = BUSY;
goto error;
}
а в конце
- Код: Выделить всё • Развернуть
error:
return errorcode;
в принципе вполне нормально и вполне может оказаться более приемлимым, чем куча вложеных if else. но когда этим goto по коду телепает во все стороны, далеко не всегда в таком коде разбираться, как он работает, искать ишибки и т.д.
с машинами состояний ты опять фанатично слеп (это не считая, что конечные автоматы машинами состояний не ограничиваются). когда состояний мало и/или они слабо связаны, вполне можно и на goto. но даже с ним, может быть не очень удобно. допустим нужно будет изменить порядок выполнения, добавить или удалить. так, здесь переходили на label1, меняем на label5. label3 удаляем, ищем все переходы на него и меняем на label4.
с ростом сложности, количеством состояний и их связанностью использование goto может стать тихим ужасом, в котором долго и трудно разобраться, всё трудней переделывать порядок выполнения, добавлять/удалять "стадии выполнения", искать ошибки,... особенно количество тех же проверок чего стоят - если s=.., тогда сейчас прыгаем туда. а если s=.., но f=.., тогда прыгаем туда. а если ещё к этим условиям добавить рандомный выбор, куда прыгать, ух какое чудное поведение бибобота будет.
ни итераторах без единого goto можно сделать просто, наглядно, с легко изменяемым порядком выполнения (хоть во время выполнения программы, без правки кода, перекомпиляции и перезаливки прошивки).