1. Си / Говнокод #4253

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    switch (n)
    {
        case k:
            some_action;
        case k - 1:
            some_action;
        ...
        case 2:
            some_action;
        case 1:
            some_action;
    }

    - когда может быть удобно использование switch без break'ов?
    - например, когда хотите повторить операцию сколько-то раз

    Запостил: nagato, 14 Сентября 2010

    Комментарии (7) RSS

    • http://en.wikipedia.org/wiki/Duff's_device
      Ответить
    • когда может быть удобно использование switch без break'ов?

      когда нужно чтобы управление проваливалось сквозь casе
      Ответить
    • А почему бы и нет? Это в Паскале аналогичная конструкция подразумевает индивидуальную функциональность для каждой ветки. А в С и С++ `switch` состоит из единственного составного statement-а, с расставленными внутри метками - точками входа. Если у вас в программе возникла естественная необходимость реализовать некое "инкрементальное" ветвление, т.е. когда каждая последующая ветка - это суффикс предыдущей, то `switch` без `break` - это именно то, что надо. Разумеется, рекомедуется комментировать свои намерения, чтобы потом читатель кода не гадал, забыт ли тут `break` по ошибке или так и задумано.
      Ответить
    • Я думал тут конкретный код приводят.
      Да, довольно некрасиво, но оценить не могу че-то.
      Ответить
    • Замена цикла таким switch'ом конечно же ГК, но вот сам подход безbreakового switch'a порой бывает полезен.
      Ответить
    • - У тебя чудесная улыбка. А сейчас примерь всё и прямо в одежде иди мириться. Насколько я знаю своего сына, он не злопамятный и сейчас лежит и раздумывает, как бы всё утрясти.
      Ответить

    Добавить комментарий