Кресты / Говнокод #28893 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
switch (lol) {
    case E::Foo:
        return 1;
    case E::Bar:
    default:
        return 0;
    case E::Baz:
        return 2;
}

Вы знали, что так можно?
Надо запустить пиваса.

Запостил: 3_dar 3_dar, (Updated )

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

  • А как работает, когда дефолтная секция не последняя? Компилятор добавляет case E::baz в таблицу переходов?
    Ответить
    • Ещё интересно, когда без брейков/ретурнов. Исполнение секции default провалится в следующую секцию?
      Ответить
    • Надо спросить у j123123, но мне кажется оно работает так:
      1) определяется какая метка соответствует значению, переданному в switch
      2) goto на эту метку
      3) выполняем до первого break или return
      Ответить
      • Помнишь Duff's device? Оператор switch в сишке оказался неструктурным, это просто коллекция меток (с хелпером, собирающим таблицу переходов). Но для других ЯП, основанных на сишном синтаксисе, это не так: в них сквозного прохода может и не быть. В общем, для каждого ЯП, в котором есть switch-case, нужно перепроверять.
        Ответить
        • > Помнишь Duff's device?
          Нет, я же не икарус.
          Ответить
  • Был знатный говнокодец на эту тему, на сайте пиваса.
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8