История изменений
Исправление wandrien, (текущая версия) :
Ага, и пробросить половину контекста
Пробрасывать надо ровно столько, сколько надо. Если у вас запредельное количество аргументов функции, там весь код с самого начала был написан лапшой. А были в нём goto или нет - уже несущественно.
и лишиться мутабельности какого-нибудь аккумулятора, и передавать его по указателю.
И хер с ними. Всё равно static компилятор инлайнит обратно. А если даже не инлайнит, всё равно хер с ними.
А все потому, что глубинное убеждение, полученное в детстве из чьего-то высера в интернетах, не дает просто взять и гоуту куда надо.
Да пишите как хотите, хоть задом наперёд. Если недостаёт опыта увидеть, как вся программа складывается как здание из типовых кирпичиков, и что конструкция получается модульной, ясной и в то же время прочной.
А конструкции наподобие:
label:
while (1) {
...
...
while (1) {
...
...
goto label;
...
...
goto label;
...
...
}
...
...
}
бывают в исключительных случаях. И там они смотрятся оправдано. Зачастую это какая-нибудь системная шняга, которая в этих циклах крутит мьютексы. А goto единственный способ нормально семантически показать перезапуск последовательности блокировки.
А в прикладном коде goto обычно плодят, когда потребовалось «выйти через два цикла наверх» просто потому, что нет опыта понять, как этот же код пишется в 2 раза понятнее и в одном цикле.
Исходная версия wandrien, :
Ага, и пробросить половину контекста
Пробрасывать надо ровно столько, сколько надо. Если у вас запредельное количество аргументов функции, там весь код с самого начала был написан лапшой. А были в нём goto или нет - уже несущественно.
и лишиться мутабельности какого-нибудь аккумулятора, и передавать его по указателю.
И хер с ними. Всё равно static компилятор инлайнит обратно. А если даже не инлайнит, всё равно хер с ними.
А все потому, что глубинное убеждение, полученное в детстве из чьего-то высера в интернетах, не дает просто взять и гоуту куда надо.
Да пишите как хотите, хоть задом наперёд. Если недостаёт опыта увидеть, как вся программа складывается как здание из типовых кирпичиков, и что конструкция получается модульной, ясной и в то же время прочной.
А конструкции наподобие:
label:
while (1) {
...
...
while (1) {
...
...
goto label;
...
...
goto label;
...
...
}
...
...
}
бывают в исключительных случаях. И там они смотрятся оправдано. Зачастую это какая-нибудь системная шняга, которая в этих циклах крутит мьютексы. А goto единственный способ нормально семантически показать перезапуск последовательности блокировки.
А в прикладном коде goto обычно плодят прикладные программисты, которым потребовалось «выйти через два цикла наверх» просто потому, что нет опыта понять, как этот же код пишется в 2 раза понятнее и в одном цикле.