09.11.2007, 16:29
общий
это ответ
Здравствуйте, M3sergey!
Когда в программе слишком много операторов goto, то она станосится нечитабельной (переходы могду осуществляться как по ходу кода программы, так и наоборот, "вверх", и в этом тяжело разобраться), ее будет трудно отлаживать. Но иногда использование goto позволяет сделать программу более наглядной, и в ней гораздо труднее совершить ошибку.
Приложение:
Трюки от КрысаКрис КасперскиХакер, номер #102, стр. 120Совет 3: выход из нескольких циклов сразуНачинающие программисты постоянно задают мне один и тот же вопрос: как выйти из двух и более циклов сразу? Средствами структурного программирования никак не получается. То есть получается, конечно, но приходится использовать флаги, проверяемые в каждом цикле, что не только громоздко, ненадежно, ненаглядно, но еще и непроизводительно. Современные процессоры не любят ветвлений, и каждая лишняя проверка сжирает кучу тактов, особенно на нерегулярных переходах, которые невозможно предсказать.Выход состоит в использовании горячо критикуемого goto, который обвиняют в неструктурности и вообще в «идеологической неправильности». Действительно, при злоупотреблении goto программа превращается в спагетти и ее становится совершенно невозможно отлаживать, поскольку непонятно, как мы вообще попали в этот блок кода и какая зараза совершила сюда переход. Но сравни два следующих фрагмента кода:Выход из трех циклов с использованием оператора gotofor(…){for (…){for(…){if (…) goto to_exit;}}} to_exit:Выход из трех циклов без использования оператора gotoint to_exit = 0;for(…){for(…){for(…){if (…){to_exit = 1;break;}}if (to_exit) break;}if (to_exit) break;}Не кажется ли тебе, что этот код намного более нагляден и в нем гораздо труднее совершить ошибку, чем в «идеологически правильном» варианте? Увы! В некоторых случаях, использование goto строго запрещено принятыми корпоративными правилами кодирования, против которых не попрешь. Вот такая, значит, бюрократия.