LINUX.ORG.RU
ФорумTalks

кто тут не любит goto?


0

2

Зачастую оператор goto поможет сильно упростить жизнь или же вообще является единственной вменяемой возможностью.

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

★★★★★
Ответ на: комментарий от observer

Согласен, единственная проблема goto это запутанность кода, но если программа от этого начинает работать быстрее, значит применение оправдано.

TDrive ★★★★★
()
Ответ на: комментарий от observer

goto стоит использовать если это повышает читабельность кода

Крайне редко, разумеется. Только в случае где он существенно помогает. Сталкивался с такой ситуацией только дважды и то только при портировании.

observer ★★★
()
Ответ на: Дурацкий пример. от Xellos

ЗЫ Я абсолютно не понял, что делает этот код, я просто переписал его с использованием средств структурирования. Если автор приведёт что-то более интересное, где жызненно необходим goto - с удовольствием посмотрю.

Xellos ★★★★★
()

Предсказываю следующую тему ТСа:
«кто тут не любит постоянно сидеть из под root?»

TDrive ★★★★★
()
Ответ на: комментарий от Yareg

есть возможность скрещивать метки switch такчто получить эфект break метка без использования обьявления label вполне

qulinxao ★★☆
()
Ответ на: комментарий от Xellos

Если автор приведёт что-то более интересное, где жызненно необходим goto - с удовольствием посмотрю.

Обфускация

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Xellos

Если автор приведёт что-то более интересное, где жызненно необходим goto - с удовольствием посмотрю.

любой код на асме.

TDrive ★★★★★
()
Ответ на: комментарий от cvs-255

Зачем тебе адрес функции сохранять? У тебя взаимная рекурсия что ли?

unC0Rr ★★★★★
()

goto не любят те кто не умеет документировать свои алгоритмы

visual ★★★
()
Ответ на: комментарий от cvs-255

Да, я согласен, goto жизенно необходим там, где надо написать невменяемый код, который невозможно отлаживать и поддерживать. Всё верно. Что только подтверждает, что при решении нормальных задач goto не нужен.

Xellos ★★★★★
()

В Си за 6 лет работы реально использовал goto всего 1 раз (точнее в 1 функции). Реально помогло сократить объем кода и убрать кучу условий. Разбить на функции было нельзя из-за оптимизаций по скорости выполнения.

grondek
()
Ответ на: комментарий от Xellos

Ни разу не видел, чтобы goto повышал читабельность кода.

Ситуация была следующая. Код одной тулзовины портировался для специфической платы. Из-за особенностей языка, в циклах нужно было заменить continue и break стейтменты их goto-аналогами. Получилось очень читаемо.

Если разрабатывать код с нуля и пользоваться нормальными языками - да, пока не встречал необходимостей использовать goto.

observer ★★★
()
Ответ на: комментарий от Xellos

Не обязательно структурирование, например в начале программы определить переменные, а перед ними джамп на адрес за переменными где начинается программа.
В написание вирусов, что бы встроить код вируса в программу, в начале программы ставят джамп на начало кода вируса, а в конце кода вируса джамп обратно.

TDrive ★★★★★
()
Ответ на: комментарий от Xellos

Пример 2, который уже приводили - конечные автоматы.

Реализуются либо через goto либо switch, который тот же goto, либо через многократный if-else, что по читабельности хуже.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от TDrive

в начале программы определить переменные, а перед ними джамп на адрес за переменными где начинается программа

ЧТД - в асме отсутствую средства структурирования кода. Впрочем, если бы они там были, это был бы не асм.

Xellos ★★★★★
()
Ответ на: комментарий от observer

заменить continue и break стейтменты их goto-аналогами

То есть код УЖЕ был нормально структурирован. Потому что cvs-255 привёл пример плохого кода, в котором куча goto свидетельствует о неумении автора писать программы.

Xellos ★★★★★
()

Доктор, я испытываю чувства к оператору языка. Что со мной?

gadfly ★★
()
Ответ на: комментарий от KRoN73

Какой-то язык, умеющий GOTO :)

Я знаю! Это C++!

AX ★★★★★
()

кто тут не любит goto?

Не нужно.

Debasher ★★★★★
()
Ответ на: комментарий от AlexCones

Пустословие. Открой исходники практически любого модуля ядра и удивись.

nanoolinux ★★★★
()
Ответ на: комментарий от Xellos

И почему-то значительная доля попыток переписать код с goto в код без gjtj заключается в введении флагов.

Да, так можно. Но повысится ли понимабельность, если вместо goto будут флаги?

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Да. Вместо кучи goto я использовал один флаг.

Xellos ★★★★★
()
Ответ на: комментарий от druganddrop-2

Даже на Паскале можно писать с goto! Не говоря уже об ассемблере (JMP, Jcc и проч.)

pacify ★★★★★
()
Ответ на: комментарий от Xellos

Я использовал функцию dostep 1 раз, а в структурированном коде оно было 2 раза. В данном случае это роли особой не играет, но если dostep очень медленно работающая, например берущая что-то из окружающего мира, то приведенный структурированный код будет хуже.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Это и есть goto. Просто область применения урезали.

Ключевое слово другое? Другое. Значит это не goto.

Sadler ★★★
()
Ответ на: комментарий от TDrive

А то тогда и if, и вызовы функций - тоже goto, получается.

Sadler ★★★
()

По сути break тот же goto, только в отличие от последнего выходит на один уровень, а не на сколько требуется. А давайте break запретим? :)

Adjkru ★★★★★
()
Ответ на: комментарий от Adjkru

«На сколько потребуется» не нужно. Если вам надо вне очереди перепрыгивать через несколько уровней цикла (возможно, если у вас вообще больше 2-3 уровней), у вашей программы уже большие проблемы.

Xellos ★★★★★
()
Ответ на: комментарий от cvs-255

Функцию mutator я ввёл потому, что вывел для себя эмпирическое правило - если действие встречается два раза, его надо вынести в функцию. Потому что это действие внезапно может стать многострочным, и внезапно может встретиться в третий и четвёртый раз. Если требуется оптимизация, можно использовать inline.

Xellos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.