Andrei
Я говорю о том что ситуация странная.
Andrei
Да и этот двойной цикл можно переписать через одиночный.
Andrei
Оптимально по количеству ветвлений.
Ned
for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ } }
for (int i = 0, lol = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { if (exit_cond) {++lol; break;} } if (lol) break; }
Ned
Выглядит громоздко
немножко подредактил
Ned
ни одной строкой больше в итоге
Ned
я решил ща погуглить, чем же так плох goto и в чём его обвиняют
Ned
помимо нестабильности и сложности и всякое такое
Ned
опальный он какой-то
Anonymous
Ned
в итоге иногда всё же лучше применять, да
Ned
в принципе я своё мнение публично меняю
Ned
но! в любом случае любой код нужно снабжать умеренными комментариями. и с ГОТО и без него. порой и без ГОТО чёрт ногу сломит в чьей-либо писанине.
Ned
так сломит, что не отдебажить ни вникнуть толком
Anonymous
Goto и его метки всегда надо комментировать
Ned
с другой стороны может быть ситуация вроде: goto lol; while(1) { int a = 1; lol: ++a; }
Anonymous
Например ... goto label1; //goes to label1 on line 111 ... label1: //can be accessed from gotos on lines 11 and 34 ...
Ned
Ой, так делать не надо
о чем и речь, собственно потому-то он и признан прародителем нестабильности
Anonymous
с другой стороны может быть ситуация вроде: goto lol; while(1) { int a = 1; lol: ++a; }
Кстати, gcc и clang вроде кинут warning при таком коде
Ned
он может попадать в чужие области видимости после настройки переменных в этих областях
Ned
или проскакивать инициализаторы какие-нить
Ned
и прочее
Ned
самое время затестить
Anonymous
он может попадать в чужие области видимости после настройки переменных в этих областях
В C# кстати goto может ходить только в своеё области видимости
Anonymous
Это не C, где он может прыгнуть из функции в функцию
Ned
В C# кстати goto может ходить только в своеё области видимости
а вот это не всегда правильно. как тогда выходить из цикла в большую область?
Ned
или он это решает?
Ned
мол, в большую можно, а в меньшую низя?
Anonymous
Не помню
Anonymous
Давно на шарпе не писал
Ned
g++ кинул замечание
Ned
то есть даже не предупреждения
Ned
мол, скачок crosses initialization
Ned
вру
Ned
кинул ошибку
Ned
правда, с -fpermissive это порешается
Ned
более того, прога не падает, если -fpermissive
Ned
а вполне стабильно обрабатывает эту канитель
Ned
правда вот, если поиграться с динамической памятью, думаю, можно будет поймать крэш
Ned
Ned
поиграйтесь, короч
Anonymous
Пальцами
молодец
Anonymous
поиграйтесь, короч
ты мне студию запустил
Ну так она для этого и сделана
Ned
ты мне студию запустил
ура, я научился запускать свои процессы на чужой машине
ура, я научился запускать свои процессы на чужой машине
Может уже удолишь свои сиськи с авы, трап?
Ned
мне ктКреатор запустил какой-то парень, написавший про goto
Зачем так?
Форы
Ned
Может уже удолишь свои сиськи с авы, трап?
только если подаришь мне фотку своих
Ned
Форы
затем что мне чуть выше дали пример кода, который надо поправить
Ned
оттудова я и плясал
Andrei
Блин. С планшета неудобно набирать.
Andrei
Ну не суть в общем. Просто в один фор это пишется.
Andrei
Два индекса
Andrei
Условие через &&
Andrei
И инкремент с тернарым оператором.
Andrei
Или, что то же самое, через внешний for(;;) и внутри просто инкрементить что надо.
Andrei
Но вообще да, это кажется единственный оправданный вариант использования goto
Andrei
В MISRA например.
Andrei
А, ну и да, еще вариант, но плохой: i=10; break;
Ned
в Си еще есть setjmp/longjmp
да, ещё одна интересная штука из области неизученного
Andrei
В c++ тоже есть.
Andrei
Не не нужно как правило.
🦥Alex Fails
Ага