С++ Использую goto и счастлив. Что в этом плохого?

программирование C++ матан goto

Некоторые люди, выдающие себя за крутых программистов, говорят, что за goto надо отрывать руки и по возможности голову.
Вопрос: Чем же так плох goto метод?

Примечание:
goto делает программу трудночитаемой для кого?
Для человека или для компилятора?

И еще:
метод goto как-то нетрадиционно работает с памятью. Как?

Примечание:
Я думаю ничего страшного, если goto используется один 1 раз в 100 строках.
Ответы:
Честно сказать я и сам толком хз почему! Но действительно многие люди не рекомендуют пользоваться оператором безусловного перехода! В моем универе все преподы так говорят! Я думаю, что нужно таки поверить опыту и знаниям грамотных людей и не пользоваться ей
При наличии большого числа меток и операторов goto код становится трудночитаемым.
Это говорят и множество по настоящему хороших программистов.
Программа должна быть красива как снаружи, так и внутри. Когда у тебя огромный код, goto может принести очень много неприятных моментов, делает код трудно читабельным и к тому же приводит к созданию так называемого "спагетти-кода". А поскольку goto можно легко заменить, то предпочитают его не использовать.
Существует правило хорошего тона. В нем суть чтобы программа была понятна человеку, который впервые увидел эту программу, а оператор goto нарушает естественный ход выполнения программы, делает ее запутанной и сложной в понимании.
goto игнорирует границы циклов, функций и прочих блоков, что может повлиять на использование памяти переменных и их значений.
Для человека непонятна, компилятор скомпилирует по-любому (если программа написана правильно).
int x=1;
METKA:
x++;
if(x<100) goto METKA;
и чем же плох цикл, что тут трудночитаемо? Герберт Шилдт за разумное испоьзование этой инструкции
Прочтите ссылку. Там в принципе все сказано. Когда-то было замечено, что количество ошибок в программе прямо пропорционально количеству операторов безусловного перехода. Но являлся ли при этом goto причиной ошибок- вопрос дискуссионный.
to конструктор, Вы забыли про пример хорошей читабельности кода в >2000 строк кода, напичканного goto=)
Представь себе, что программа - организм человека, где всё идет своим порядком - еда через желудок идёт в кишечник. Предположим!! что мы захотли, чтоб она шла в кишечник, минуя желудок. Для этогго понадобится:
а) телепортатор (goto)
б) убрать желудок, соединить пищевод и кишечник.
Так что выбирайте сами.
to MaLutik, а зачем тебе 2000 тысячи строк делать на безусловных переходах. я же подчеркнул- разумное использование.
to конструктор: ЭВОЛЮШН спросил, чем плохо. Плохо, когда кода много. Вы же не уточнили, что такое "разумное использование", а просто привели пример маленького кода. Да, для маленьких программок(ну или функций), может и хорошо, но, во-первых, их редко пишут, а во-вторых, Powell прав, существуют правила хорошего тона, в-третьих, Ваш пример можно написать в 2 строчки, а это красивее будет смотреться=)
А если человек научится писать с goto, то потом трудно будет переучиваться.
to MaLutik, а попробуй простыми средствами выйти из глубоко вложеных инструкций цикла и посмотрим у кого будет нагляднее
Нам объясняли , что  используя цикл if и goto модно писать любые программы  и не надо закорачиваться .
to конструктор: Погуглив, нашла, что в принципе можно воспользоваться return'ом, но скажу честно, с таким не сталкивалась, и утверждать по поводу глубоко вложенных циклов ничего не буду, пока сама не попробую. Спасибо за пример)
>конструктор:
>to MaLutik, а попробуй простыми средствами выйти из глубоко вложеных инструкций цикла и посмотрим у кого будет >нагляднее
А чем throw() не угодил?
Есть ещё более изощрённые способы, например:
do{
 if(){
...
 }else
   if(){
...
   }
}
while(0)
из любого места такого типа вложенности можно выйти одним break`ом... Правда это при отсутсвии циклов...
Обычно всё же exceptions...
Goto целесообразно использовать в небольших по объему участках кода. И желательно меньшее число раз. Когда строк становится очень много, то лучше поискать альтернативу, потому что во-первых другие не смогут нормально проанализировать код, а во-вторых вы его не сможете проанализировать спустя 2-3 месяца (когда он понадобится или нужно будет произвести рефакторинг).
вообще пишите как хотите))) дело ваше))
но если ты хочешь что бы твой код можно было читать а ты знаешь что психологи определяют по почерку характер человека.. так по коду тоже можно многое сказать о человеке о его логике о том как он мыслит как он понимает о его стиле жизни.. удивлён.. я был тоже сначало но спустя много лет и сам стал понимать это действительно так..
а гоуто нельзя использовать ещё и потому что может произойти перекрытие кода т.е. комп попадёт в неопределённое состояние вот тогда будет совсем плохо..
когда у тебя мало опыта и ты мало что смыслишь в программировании то не нужно спорить с такими метрами программирования как Вирт, Кнут и другие вообщем а когда и сам станешь крутым то и сам будешь говорить и понимать почему нельзя а пока если не доходит то просто делай как говорят а говорят тебе к счастью правильно))) бывает такое что преподы наоборот говорят что гоуту надо писать и лабы дают на них вот их не понимаю для чего это!!!
но у вас всё ок))


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.