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

    +105

    1. 1
    2. 2
    3. 3
    int run_zero[] = {0xfffffffe,0xfffffffd,0xfffffffb,0xfffffff7,0xffffffef,0xffffffdf,0xffffffbf,0xffffff7f,0xfffffeff,0xfffffdff,0xfffffbff,0xfffff7ff,0xfffefff,0xffffdfff,0xffffbfff,0xffff7fff,0xfffeffff,0xfffdffff,0xfffbffff,0xfff7ffff,0xffeffff,0xffdfffff,0xffbfffff,0xff7fffff,0xfeffffff,0xfdffffff,0xfbffffff,0xf7ffffff,0xefffffff,0xdfffffff,0xbfffffff,0x7fffffff};
    int run_one[] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000,0x20000000,0x40000000,0x80000000};
    int chess_code[] = {0xa5,0x5a};

    Первые строки теста регистров некоего контроллера. Хорошо, что регистры не 64-разрядные, а то задолбался бы паренёк. А уж про chess_code вообще молчу. Вот так суровые российские программеры, не боящиеся лишней работы, тестируют авиационное бортовое оборудование.

    Запостил: whiskey, 01 Ноября 2010

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

    • >тестируют авиационное бортовое оборудование.
      а потом самолеты падают.
      Ответить
      • Нет, не падают. Вернее, падают не из-за этого. Потому что разработчики железа - более ответственный народ, нежели программисты.
        Ответить
        • > Потому что разработчики железа - более ответственный народ, нежели программисты.
          Неудачное место для таких высказываний :)
          Ответить
    • Это все чтоб запутать "потенциального противника".
      Ответить
      • скорее запутать следующего разработчика данного кода
        Ответить
    • показать все, что скрытоХм, а как иначе это сделать?
      Ладно, во второй строке прослеживается определённая последовательность, но первую проще всего раз ввести вручную, и дальше не парится.
      Ответить
      • следите за руками :)
        for( int i=0; i<32; ++i )
        {
            cout << hex << (0xffffffffu & ~(1u << i)) << endl;
        }

        Кстати в 13 и 21 значении в run_zero ошибка. А всё из-за того, что руками забивалось.
        Ответить
        • fuuuuuuu, обскурненько
          Ответить
          • всмысле ffffuuuuu?
            Ответить
            • страуструпные сдвиги в одной строке с bitwise
              Ответить
              • пожалуйста, покажите как надо (серьезно)
                Ответить
                • Логичное предположение - выделить это в функцию.
                  Ответить
                  • Это логично будет в настоящем коде.
                    А зачем это делать в коде-примере?
                    Ответить
                • раздел Си, пример на плюсах, вот я думаю не сбацать ли альтернативу на паскале? :-)
                  вообще код плачет не столько по функции, сколько по add explaining var
                  чтобы отделить детали вывода от арифметики, вот там даже скобочки избыточные имеются
                  Ответить
                  • Кхе. Ну представьте printf заместо cout. Или даже WriteLn :)
                    Код демонстрирует лишь возможность формирования последовательности, и не ставит своей целью демонстрацию правил красивого оформления.
                    Ответить
                    • for( int i=0; i<32; ++i ) {
                          unsigned long pattern = 0xffffffffu & ~(1u << i);
                          /* хороший страус - мертвый страус */
                          cout << hex << pattern << endl;
                          /* чего хотел заказчик */
                          run_zero[i] = pattern;
                      }
                      Ответить
                      • А как же тип у run_zero[] ? И вообще, к чему эти очевидности? И так всё ясно из предыдущего сообщения про "explaining var".
                        Ответить
                        • Если всё очевидно и ясно, почему мы до сих пор спорим о том, что не стоит заслонять основные операции с любезной помощью распечатки результата? Для примера это так же важно, как и для продакшна.

                          Mea culpa, оказался заимствован кривенький знаковый тип сверху
                          Ответить
                          • "Для примера" это было скопипастщено из IDE и не причесывалось. Повторюсь, что демонстрировалось это для koodeer, который не увидел логики в последовательности. Не более того.
                            P.S. На тему знаковости вполне вероятно разницы никакой нет, будь там signed или unsigned. Битовое представление будет одинаковое. А что ещё нужно для проверки регистров контроллера.
                            Ответить
                            • ну, если обратишь внимание на следующее по времени сообщение от koodeer, то станет ясно, что он стал жертвой обскурности оригинальной иллюстрации.

                              будь я траслятором, плюнул бы warning`ом, как минимум, ибо нестрого.

                              призываю The Calligrapher`а в тред!
                              Ответить
                              • Я конечно не провидец, но мне почему-то кажется, что на момент написания первого сообщения koodeer'а, он даже не догадывался о наличии ошибок в 13 и 21 значениях. Потому что чтобы это понять, надо хотя бы в столбик их выписать и тут уже вопрос о логике последовательности отпал бы сам собой.
                                p.s. На то мы и люди, а не трансляторы. Плеваться надо по-человечески :)
                                Ответить
                                • Логичное построение, однако не соглашусь. На мой взгляд предпосылки такие: koodeer успешно идентифицировав тривиальную вторую последовательность и, возможно, получив дополнительный хинт про инверсию из третей последовательности, применил гипотезу к первой, но дойдя до 13-ого элемента получил отрицательный результат, что он и суммировал в первом комменте. За это говорят и заметные нибблы E D B 7 на фоне F. И чтобы засечь ошибку надо внимательно смотреть на кол-во разрядов с F.
                                  Помимо моего вывода об обскурности выше, напрашивается еще один: промахи набивальщика в большую сторону (т.е. 9 разрядов) были отловлены транслятором и поправлены. Чем строже себя ведет транслятор - тем лучше :)
                                  Ответить
                                  • По-моему, ноль убежал.
                                    Призываю koodeer'а в тред! :)
                                    Для разъяснения хода мыслей.
                                    Ответить
        • А откуда известно, что там ошибка? Может так и должно быть. Я потому и говорил, что в таком случае проще ввести руками.
          Ответить
        • Красавчик. Я как-то сразу не допёр, что тут 0 перемещается.
          Ответить
    • > тестируют авиационное бортовое оборудование
      пробуют "Беломор"
      Ответить

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