Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

почему погромисты считают что инструкция goto в c++ очень очень плохая

KPУПHЫИ POГATЫИ Ученик (175), открыт 8 часов назад
10 ответов
Игнат Осколкин Мастер (1920) 8 часов назад
Потому, что ты можешь написать кучу кода, а потом такой GOTO и выкинуть исполнение вообще хрен знает куда.
KPУПHЫИ POГATЫИУченик (175) 8 часов назад
не "хpeн знает куда" вообщето а по метке специальной
Игнат Осколкин Мастер (1920) KPУПHЫИ POГATЫИ, и эта метка может быть где угодно. То есть хрен знает где
Moon LateГуру (4697) 8 часов назад
По метке, это то понятно. Но переход по метке может нарушить стек вызовов и время жизни переменных, создать утечку памяти. То есть, должно быть очень веское обоснование goto.
В частности, goto может быть применено для быстрого выхода из вложенных циклов. Но опять же, нужно смотреть, не произойдет ли утечка памяти при этом.
Всеслав Уссурийский Знаток (437) 8 часов назад
потому что она разрушает структуру кода, усложняет его поддержку и увеличивает риск ошибок.
Ромка Волков Знаток (346) 8 часов назад
потому что с goto код становится как лапша у бабки на кухне вообще хрен разберёшься
Лайт Ягами Искусственный Интеллект (338668) 8 часов назад
Не вписывается ни в функциональную, ни в объектоориентированную парадигму
Moon Late Гуру (4697) 8 часов назад
Потому что из-за перехода по goto может нарушиться стек вызовов и время жизни переменных и объектов, что вызовет непредсказуемое поведение программы.
То есть, нужно очень хорошо понимать, зачем вы делаете goto и вкуда и через что конкретно он приводит.
В частности, goto может быть применен для быстрого выхода из вложенных циклов по условию. Однако, нужно убедиться, что это действие не приведет к побочному эффекту (утечка памяти, разрушение стека).
Андрей Высший разум (482586) 7 часов назад
Потому, что избыточное использование goto уменьшает надёжность кода и затрудняет его понимание / модификацию. Использование goto провоцирует написание спагетти-кода, в котором очень сложно разбираться.

В языке C (без плюсов) goto может использоваться для обработки ошибок, но в C++ есть структурные исключения (try-catch), которые делают бессмысленным использование goto в этих целях.

Единственное, где goto имеет смысл использовать - это имитация многоуровневого break (завершение сразу нескольких вложенных циклов), отсутствующего в C/C++. Но намного лучше обернуть эти несколько циклов в функцию и делать return: от разбиения большого монолита на небольшие функции код становится куда понятнее.

P.S. Чаще всего goto используется не в коде, написанном человеком, а в коде, созданном всяческими генераторами по заданному набору правил. Программу, генерирующую код с goto, написать намного проще, чем программу, генерирующую код без goto.

В качестве примера просто посмотри, сколько goto в модуле парсинга даты/времени в исходниках PHP:
  • Вот это - шаблон, описывающий структуру и способы обработки даты/времени:
    https://github.com/php/php-src/blob/master/ext/date/lib/parse_date.re
  • А вот это - готовый C-код, автоматически сгенерированный по шаблону: https://github.com/php/php-src/blob/master/ext/date/lib/parse_date.c
Картофельный папа Искусственный Интеллект (445838) 7 часов назад
Ну так сказал Дейкстра.
Ну а компилятор превратит все их старания в машинный код, состоящий чуть менее чем полностью из goto, точнее, инструкций условных и безусловных переходов процессора.
Jurijus ZaksasИскусственный Интеллект (472180) 6 часов назад
Ну все-таки в основном там MOV, а не JMP, но переходов тоже хватает, разумеется.
Jurijus Zaksas Искусственный Интеллект (472180) 6 часов назад
Она не плохая, она просто не нужна.
Можно использовать ее в качестве оптимизации для выхода из циклов глубокой вложенности, когда один goto всяко лучше кучи if/break, но более она просто не нужна ни для чего.
Сергей Гений (60533) 6 часов назад
C++ все же язык высокого уровня, в котором все эти низкоуровневые штучки ака goto отданы на откуп компилятору. Если компилятор ставит го-ту где нужно + добавляете вы свои, выходит как письмо Дяди Федора дописанное котом и Шариком. Смысл есть - но не понятно где чей)
Похожие вопросы