1. C++ / Говнокод #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, 22 Декабря 2023

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

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

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