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

    +147

    1. 1
    write_ext = ".pgm\0.ppm\0.ppm\0.pam" + colors*5-5;

    из dcraw.c - кладезь вот таких перлов. то ли говнокодер писал - то ли гений. настолько лаконичного кода давно уже не видел.

    http://www.cybercom.net/~dcoffin/dcraw/

    Запостил: Dummy00001, 15 Октября 2011

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

    • говно полное. нет чтобы массив сформировать. и main() на почти 400 строк это пиздец со злобной смесью goto и #ifdef.
      Ответить
    • на интересные языки переведено:
      >en Esperanto
      >em Português
      >на русском
      >па-беларуску

      Просто автор индиго. Люди нашего времени его не примут.
      Ответить
      • Да мне вот тоже кажется, что этот типок просто уникальный,
        если там и есть говно - видно писали его с выдумкой и вполне возможно под веществами, а не за еду.
        Ответить
    • В модуле 9200 строк кода. Причем дофига кода, который описывает данные, а не логику.
      Чет типа
      static const uchar xlat[2][256] = {
      { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d, 0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d,
      0x53,0x59,0xe3,0xc7,0xe9,0x2f,0x95,0xa7, 0x95,0x1f,0xdf,0x7f,0x2b,0x29,0xc7,0x0d,
      0xdf,0x07,0xef,0x71,0x89,0x3d,0x13,0x3d, 0x3b,0x13,0xfb,0x0d,0x89,0xc1,0x65,0x1f,
      0xb3,0x0d,0x6b,0x29,0xe3,0xfb,0xef,0xa3, 0x6b,0x47,0x7f,0x95,0x35,0xa7,0x47,0x4f,
      0xc7,0xf1,0x59,0x95,0x35,0x11,0x29,0x61, 0xf1,0x3d,0xb3,0x2b,0x0d,0x43,0x89,0xc1, ........
      Чувак реально чокнутый

      На главной страничке есть фотка с гугл мапс. Где его запечатлили толкающим коляску с ребенком.
      А он шустрый. Все успел.
      Ответить
      • судя по фоточке он спиздил грудничка
        Ответить
        • А ведь спиздить, пожалуй, займет большее количество времени, чем сделать. Все зависит от наличия женщины.
          Оупс..вот где он время сэкономил. Бабу искать не стал. Нашел сразу ребетёнка.
          Ответить
          • а может быть, он как прапорщик - тачки пиздит?
            Ответить
            • Еще раз заглянув в его код, стал сомневаться, что он вообще человек
              Ответить
              • Иван Федорович крузенштерн человек и пароход
                Dave Coffin a man and decoder.
                P.S. Да, коляску как угнал, ручки-держаки низко — сутулится.
                Ответить
    • Может, он методом проб и ошибок писал код? Код поддерживает 500 фотокамер, и наверное не везде спецификации открыты, см.:

      "> Do you have any specifications describing raw photo formats?
      > Yes, but they tend to omit important details, like how to decompress the raw image or decrypt private metadata"

      Я предполагаю, он сам особо не знает, что все эти константы значат. Возможно, он писал код на основе реверс-инжениринга? Я бы тогда тоже замаялся придумывать имена ~9000 константам и прочим моментам поведения.

      Без вникновения в код/ситуацию я бы не судил так с плеча.
      Ответить
      • хотя... на вопрос почему не хочет делать код библиотекой, он пишет:

        >Library code is ugly because it cannot use global variables
        Ответить
    • обьясните мне паскалисту что там за х**ня такая?
      я нихрена не понял что он хотел этим сделать...
      Ответить
      • Видимо, выбрать нужное расширение из набора. Строка на самом деле - указатель на первый символ. К ней прибавляется некоторое число, смещение (арифметика указателей). Нужное расширение - набор символов от полученного указателя до первого нулевого символа. Одновременно хитро и тупо: вполне достаточно было массива расширений.
        Ответить
      • если речь об опубликованном ГК, то получить расширение файла по значению colors.
        т.е. в адекватном случае это должен был быть массив
        Ответить
        • >должен был быть массив
          Однозначно. Веселуха начнется когда нам потребуется записать что-то вроде
          {".bmp", ".jpg", ".jpeg", ".gif"};
          Ответить
          • может быть там расчет на 8.3 имена, а всякие .jpeg, .torrent и .fuckinglongextension просто считаются еретическим отродьем
            Ответить
      • простая задача, и такое хитрожопое решение...
        Ответить
        • скажем просто, что это гримасы нестрогой типизации
          крестоблядство!
          taras.jpg
          Ответить
      • строковые литералы в С они по типу указатели на (константрый) массив символов.

        указатели в С поддерживают арифметику, например аддрес n-го элемента массива `&a[n]` можно написать так же `a+n`. вот это самое `a+n` и стоит сверху (строковый литерал + целочисленное выражение).

        теперь литерал. С автоматом в конце всех строковых литералов добавляет 0 (nul terminated string). строковый литерал таким образом выглядит как массив состоящий из 4х подстрок длиной 5 символов: ".pgm\0", ".ppm\0", ".ppm\0", ".pam\0". (та цифра "5" ссылается на длину этих подстрок, включая ноль на конце.)

        таким образом, варьируя переменную `colors` от 1 до 4, `write_ext` будет указывать на одну из этих nul-terminated подстрок.

        развернутый код для этого дела аналогичен вот этому:
        const char all_write_ext[4][5] = {  ".pgm", ".ppm", ".ppm", ".pam" };
        write_ext = all_write_ext[colors-1];
        Ответить
        • Мистер Джабез Уилсон громко расхохотался.

          – Вот оно что! – сказал он. – Я сначала подумал, что вы бог знает какими мудреными способами отгадываете, а, оказывается, это так просто.

          – Я думаю, Уотсон, – сказал Холмс, – что совершил ошибку, объяснив, каким образом я пришел к моим выводам. Как вам известно, «Omne ignotum pro magnifico», и моей скромной славе грозит крушение, если я буду так откровенен…
          Ответить
    • показать все, что скрытоvanished
      Ответить

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