С Новым годом! Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/75: Рейтинг темы: голосов - 75, средняя оценка - 4.93
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1

Чем плох goto?

06.08.2016, 11:17. Показов 16619. Ответов 195
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вы хотели интересных тем? Так вот, я на днях думал, а почему goto так плох, и решил загуглить, почему же? Я нагуглил вот эту статью и, мне кажется, что goto можно использовать там, где это безопасно и нет возможностей выстрелить себе в голову ногу. Конечно, мы говорим о С++ и тут всегда есть такая возможность, но что уж тут. Так вот, используете ли Вы goto и почему, а если не используете, то опять же, почему?

P.S. Пожалуйста, давайте уважать друг друга и не писать ответы типа: "Потому что препод/форумчанин/в книге так сказали", давайте объективные причины писать! Спасибо.
(Жаль, что мне за такую "интересную" тему не заплатят )
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2016, 11:17
Ответы с готовыми решениями:

Чем плох управляемый С++?
Я дико извиняюсь за подобную тему... но дело в том, что мне сегодня задали этот вопрос и, собственно, я не смог на него ответить. Сам я...

Чем плох uCoz?
Добрый день! Хотел бы услышать объективные мнения специалистов, на тему "Почему юКоз нельзя использовать для создания полноценного...

Чем плох make?
Дали написать реферат по make файлам и соответственно указать его минусы, а значит сравнить его с такими утилитами как CMake, но для меня...

195
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
06.08.2016, 11:22
Цитата Сообщение от GbaLog- Посмотреть сообщение
Вы хотели интересных тем?
- 2016 год
- "Чем плох goto"
- Интересная тема

Выбери любые два
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
06.08.2016, 11:29  [ТС]
Voivoid, А что, разве не интересная тема? Сколько проектов на том же github'e не смотрю, там нигде не было goto, ну, если только это был не С-проект. Почему его не используют? Очень полезный в некоторых случаях оператор.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
06.08.2016, 11:35
Цитата Сообщение от GbaLog- Посмотреть сообщение
Voivoid, А что, разве не интересная тема?
Она была интересная и актуальная лет так 50 назад.

Цитата Сообщение от GbaLog- Посмотреть сообщение
Почему его не используют?
Везде есть более декларативные средства (ну кроме как в C )
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 11:39
Цитата Сообщение от GbaLog- Посмотреть сообщение
Почему его не используют?
его используют при программировании на языке ассемблера (вернее, его аналог - jmp)
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
06.08.2016, 11:42
Цитата Сообщение от GbaLog- Посмотреть сообщение
А что, разве не интересная тема? Сколько проектов на том же github'e не смотрю, там нигде не было goto, ну, если только это был не С-проект. Почему его не используют? Очень полезный в некоторых случая оператор.
Наверное потому, что при использовании goto, программа становится (условно) нечитабельная.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
06.08.2016, 11:42  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
его используют при программировании на языке ассемблера (вернее, его аналог - jmp)
Ну мы-то в ветке С++, поэтому, собственно, и вопрос по данному языку.
Цитата Сообщение от Voivoid Посмотреть сообщение
Везде есть более декларативные средства
Да, и какие же в С++?
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
06.08.2016, 11:43
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
его используют при программировании на языке ассемблера (вернее, его аналог - jmp)
Наверное это goto аналог jmp =))
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 11:44
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ну мы-то в ветке С++, поэтому, собственно, и вопрос по данному языку.
Ну дак, в C++ можно же использовать ассемблерные вставки, следовательно, ассемблер - это С++
А вобще goto используется например для выхода из очень-очень глубоких вложенных циклов. Break'ом тут не обойдешься...
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
06.08.2016, 11:45  [ТС]
Цитата Сообщение от andreyananas Посмотреть сообщение
Наверное потому, что при использовании goto, программа становится (условно) нечитабельная.
Ну это всё зависит от степени "закостенелости" мозга под программирование без оного, ИМХО.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 11:45
andreyananas, по-твоему с++ появился раньше языка ассемблера, чтобы он мог наследовать из него что-то?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
06.08.2016, 11:46  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
А вобще goto используется например для выхода из очень-очень глубоких вложенных циклов. Break'ом тут не обойдешься...
Ну об этом сказано в статье, что я скинул.
Вот и первый нормальный довод, почему можно использовать goto.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 11:48
Цитата Сообщение от GbaLog- Посмотреть сообщение
Ну об этом сказано в статье, что я скинул.
Я, как правило, темы и комментарии до себя никогда не читаю, прежде чем писать свой комментарий. Лень)
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
06.08.2016, 11:49
Цитата Сообщение от GbaLog- Посмотреть сообщение
Да, и какие же в С++?
Зависит от задачи которая решается при помощи goto. Типичные пример: освобождение ресурсов в случае возникновения ошибки. В сишке используют для этого goto, в плюсах в goto необходимости нет, т.к. есть RAII.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 11:55
GbaLog-, в области структурного программирования есть теорема (https://ru.wikipedia.org/wiki/... _—_Якопини), согласно которой любую задачу можно решить, используя всего 3 управляющие структуры - последовательность, ветвление и цикл.
Оператор goto не вписывается в нормы структурного программирования, поскольку посредством него в программах происходит незакономерная передача управления из одного участка программы в другой (называется спагетти кодом)
0
 Аватар для andreyananas
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
06.08.2016, 11:57
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
по-твоему с++ появился раньше языка ассемблера, чтобы он мог наследовать из него что-то?
Нет, я просто думал асм появился раньше *очень стыдно*
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
06.08.2016, 12:04
Цитата Сообщение от andreyananas Посмотреть сообщение
Нет, я просто думал асм появился раньше
Извини, я берега попутал, ты все верно написал)
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
06.08.2016, 12:28
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
его используют при программировании на языке ассемблера (вернее, его аналог - jmp)
Да и в С++ используют его - switch case
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
06.08.2016, 12:44
Цитата Сообщение от GbaLog- Посмотреть сообщение
а почему goto так плох
Единственное чем плох goto - плохой читабельностью программ где он повсеместно ЯВНО пользуется. НЕявно он присуствует во всех операторах ветвления и циклов, но это не мешает читабельности и восприятию алгоритма и хода выполнения. А огромное количество ошибок появляется именно от низкой читабельности инеправильного восприятия алгоритма и порядка исполнения. Этим собственно goto и плох при повсеместном использовании. Но к примеру выход сразу из пачки циклов по goto - единственное нормально читабельное решение вопроса. Хотя в современных реалиях и повсеместом ООП это пользуется редко. Гораздо чаще вместо goto за конец циклов встречается return который содержит его неявно.

Добавлено через 7 минут
Цитата Сообщение от GbaLog- Посмотреть сообщение
Почему его не используют?
Проблема действительно была актуальна 50 лет назад.
Когда условный оператор ветвления выглядел так и никак иначе
PureBasic
1
IF A>B GOTO 20 ELSE GOTO 50
только так и никак иначе. тогда это действительно было очень неудобно. так это учебный язык. на боевом фортране все гораздо мрачнее. Т.е. и сыр-бор был поднят 50 лет назад по поводу того что такой goto зло, а удобнее вот так:
C++
1
2
3
4
5
if (A>B){
  //code
}else{
  // other code
};
и типа обязать производителей компиляторов научить компиляторы транслировать такие конструкции в конструкции на машкоде с goto.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.08.2016, 12:51
Цитата Сообщение от GbaLog- Посмотреть сообщение
а почему goto так плох, и решил загуглить, почему же?
да нормальный оператор.
иногда очень даже упрощает жизнь.

его непопулярность связана с тем,
что злоупотребления могут привести к осложнениям жизни,
и поэтому авторитетные персонажи решили:
а давайте мы новичкам сразу мозги промоем,
что бы они вообще его не использовали,
и будет счастье в нашем говнокоде королевстве.

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

Добавлено через 1 минуту
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Да и в С++ используют его - switch case
не над путать синтаксис языка,
и низкоуровневую кухню компиляторов.
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2016, 12:51
Помогаю со студенческими работами здесь

чем плох mysql_query
Просматривал вакансию на пхп juniora наткнулся на такое требование "В коде нет и намека на mysql_query("SELECT * ...." я...

Чем плох void main?
Встретил мнение, что void main() - не канон и даже плохо. Но статья древняя, 1996 года, и даже автор открестился, сказав, что для новых...

Чем плох std::map?
std::map ?

Чем плох ProBuilder (Unity3D)?
Мне советовали не использовать ProBuilder, а моделить в какой-нибудь проге - текстурить и потом эспортировать в юнити. Аргументировали это...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru