1. C++ / Говнокод #23674

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    switch (sy->type) {
    if (0) case RTLIL::ST0: f << stringf("low ");
    if (0) case RTLIL::ST1: f << stringf("high ");
    if (0) case RTLIL::STp: f << stringf("posedge ");
    if (0) case RTLIL::STn: f << stringf("negedge ");
    if (0) case RTLIL::STe: f << stringf("edge ");
        dump_sigspec(f, sy->signal);
        f << stringf("\n");
        break;
    case RTLIL::STa: f << stringf("always\n"); break;
    case RTLIL::STg: f << stringf("global\n"); break;
    case RTLIL::STi: f << stringf("init\n"); break;
    }

    Не видел ещё тут такого. Новый вид гоатсеуту.
    Нашел тут:

    https://tinyurl.com/y8eov5pc // https://www.reddit.com/r/cpp_questions/comments/7swqbp/if_0_case/
    Исходник:
    https://tinyurl.com/ybtoqeon // https://github.com/fabiensanglard/xrick/blob/239d213f01be8d0086c449080ce61bde8dcad7b4/src/data.c#L189

    Запостил: Xom94ok, 25 Января 2018

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

    • В связи с неисправностью голо-совалки, объявляю сий комментарий заглушкой рейтинга поста.
      Ответить
    • Исходник не тот. Вот правильный:
      https://tinyurl.com/ybm4btrf // https://github.com/YosysHQ/yosys/blob/1d8161b432fd5bc7fc03c21033f90d2a80cf741f/backends/ilang/ilang_backend.cc#L221
      Ответить
    • Хм, красивый паттерн в строках 2-6. Надо запомнить.
      Ответить
      • А чо так можно было?
        Ответить
      • > C#
        я_ебу_собак.cs(9,3): error CS1525: Unexpected symbol `if', expecting `}', `case', or `default:'
        Compilation failed: 1 error(s), 0 warnings
        Ответить
        • Скучный язык этот ваш C#. Неспроста там решётка в названии.
          Ответить
          • ну там можно case x when false
            не так красиво, но лучше, чем ничего
            Ответить
            • Но case x when false никогда не выполнит код, стоящий за ним?

              А в топике всё выполняется и работает как goto на строку 7 в конце каждой из строчек 2-6.
              Ответить
              • fallthrough?
                Ответить
                • Ага. А if (0) защищает лишние строки от исполнения.
                  Ответить
                  • Но в C# fallthrough все равно почти запрещен (что мне кажется на самом деле очень правильным, пусть лучше goto case, чем ничего)
                    Ответить
                    • goto case было в коде первых компиляторов C, что-то наподобие:
                      goto case0;
                      /*...*/
                      case0:
                      case 0:
                      Если сам Ритчи не пренебрегал, то кто я такой...
                      Ответить
                      • https://tinyurl.com/ybzs7o5q // https://github.com/mortdeus/legacy-cc/blob/master/prestruct/c02.c#L93
                        Ответить
                        • >goto case23;
                          Господи, эталонная лапша, прям сo времён фортранов с бейсиками.

                          If you ignore the fact that it's `structured', even `C' programming can be appreciated by the Real Programmer. 
                          After all, there's no type checking, variable names are seven (ten? eight?) characters long, and the added bonus of the Pointer data type is thrown in.
                          Ответить
                      • Ну в языке богов^W C# не надо еще метки делать. Просто goto case 0;
                        Ответить
                  • Как-то ngk с трудом трекает редактированные комменты
                    Ответить
                    • Потому что он ходит читать треды только когда в них появится новый коммент.
                      Ответить
                      • Так он и старые коменты в базе обновляет? А если придет пидорас страйкер и потрет юзера - из базы его коменты тоже потрутся?
                        Ответить
                        • Потрутся. Тред полностью синхронизируется. Ибо хранение истории комментов лень было прикручивать.
                          Ответить
                          • Разреши обновление коментов только в течении 5 минут. Ну и можно бэкапы базы делать регулярно.
                            Ответить
                            • Тогда по-хорошему надо ещё контрольный заход делать через 5 минут после последнего коммента в треде.
                              Ответить
                              • Тебе же лень? А эта проверка- один if.
                                Ответить
                                • > эта проверка- один if
                                  Она же не будет работать в чистом виде...

                                  Если ты поправишь коммент и за 5 минут больше никто ничего не напишет в этом треде - у синхронизатора не будет повода лезть в тред. И твой коммент навсегда застрянет на первой версии.
                                  Ответить
                                  • Она не даст несанкционированно исправить комент в базе.
                                    Ответить
                                    • Зато в половине комментов проебутся правки. Не, в чистом виде я проверку добавлять не буду.
                                      Ответить
                                      • Што?
                                        Ответить
                                        • Прочитай коммент выше и объясни что именно в нём тебе не понятно.

                                          Твоя проверка поломает синхронизацию отредактированных нормальными юзерами комментов. К ней ещё что-то надо добавлять для нормальной работы.
                                          Ответить
                                          • vanished
                                            Ответить
                                          • Тогда надо писать в базу дату последнего сканирования и если между этим сканированием и датой комментария прошло больше 5 минут то больше апдейтов не принимать.
                                            Ради стока такое делать перебор, а вот если хочешь базу создать то самое то.
                                            Ответить
                                            • Да, так будет работать.

                                              Но для полноты надо планировать ещё один скан через 5 минут если на прошлом нашлись свежие комменты, которые ещё могут исправить. Иначе последние комменты в тредах не заморозятся.

                                              Вроде дата апдейта у меня в табличке уже есть. Просто на сканер нет юнит-тестов и боязно его править.
                                              Ответить
                                              • На что тебе там юнит тесты нужны? На парсер?

                                                Неужели мне придется гитхаб осваивать? :(

                                                Тебе и не обязательно проводить специальный скан чтобы их заморозить. Обычно достаточно случайного скана.
                                                Ответить
                                              • можно пересканировать через x времени если тред не был сканирован после появления последних коментов. Через час. Или через сутки. Ну это если сканы экономить.
                                                Ответить
              • >Скучный язык этот ваш C#
                >А в топике всё выполняется и работает как goto на строку 7 в конце каждой из строчек 2-6.

                BLOCK: {
                    doShit1(); break BLOCK;
                    doShit2(); break BLOCK;
                    doShit3(); break BLOCK;
                    doShit4(); break BLOCK;
                }
                out.print("/n")

                Если в безgotoшной яве так можно, поцчему в шарпе низя?
                Ответить
                • В смысле так
                  https://ideone.com/wwUr0H
                  Ответить
                  • Чот не понял в чем разница между бряк и бряк блок.
                    Ответить
                    • бряк брякает только текущий блок. В указанном коде это блок свича, потом выполняется print.

                      бряк блок (labeled break) брякает текущий, блок содержащий текущий и так далее, пока не блякнет блок помеченый соответссвующим идентификатором. В данном коде он брякает два блока: свич и блок содержащий принт.
                      Ответить
    • https://media.tenor.com/images/102164314215df9c056dba97f3ceb8cf/tenor.gif
      Ответить

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