LINUX.ORG.RU

История изменений

Исправление 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 раза понятнее и в одном цикле.