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

    +125

    1. 1
    #define DV_ERR_13               (DV_ERR_BASE + 15)

    There, i fixed it!
    Нашел в зловонных недрах Video for Windows. Если кому интересно, значение ни разу не 13, а 16.

    Запостил: bugmenot, 16 Февраля 2012

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

    • Ух тыж ёпт, у них там дальше копипаста
      #ifndef NOAVIFILE
      // дохренища условных директив
      #endif  /* NOAVIFILE */
      #ifndef NOMCIWND
      // еще дохренища
      #endif  /* NOAVIFILE */
      #ifndef NOVIDEO
      // а здесь директив - жопой ешь
      #endif  /* NOAVIFILE */
      Ответить
      • даешь пруф, может там ещё кладезь
        Ответить
        • да вот же он file:///$(MSSDK)/include/vfw.h

          там еще чудо макросы с параметрами i для int, s для struct, причем даже в самых древних дока это уже пофиксили
          Ответить
    • Ну а кто сказал, что должно быть 13?

      Если я напишу int i3 = 5; то здесь тоже говнокод?
      Ответить
      • >int i3 = 5; то здесь тоже говнокод?
        Кстати, да. Абсолютно не говорящее имя. И надо либо const добавить, либо вместо 5ки константу ввести.
        Ответить
      • это уже боян будет, потому что майкрософт еще первой половине 1990-х высрал :-Р
        Ответить
    • Беспочвенная придирка. Классическая ситуация, когда в теле некоторой функции наличествует несколько независимых источников ошибок, и каждый обладает собственной спецификацией на коды ошибок. При этом надо все эти источники ошибок свести в один кода возврата нашей функции. Возможный подход - разбить диапазон кодов возврата на поддиапазоны, соответствующие каждому из возможных источников. Каждый подддиапазон определяется своим "смещением" ('DV_ERR_BASE' в данном случае - один из них). А названия типа 'DV_ERR_13' - это не собственное творчество данного автора, а не более чем результат навязанной ему извне спецификации. Т.е. в данном поддиапазоне описываются ошибки некоего источника (устройства, API и т.п.), в спецификации котого они заданы как "ошибка 5", "ошибка 13" и т.п. Понятное дело, что в транслированном диапазоне жедательно было максимально сохранить привзяку к исходной спецификации, т.е. по крайней мере на уровне исходного кода программы продолжать ссылаться на "ошибку 13" через мнемонику именно "ошибки 13", даже если представляющее эту ошибку физическое значение отличается от 13-ти.
      Ответить
      • а ничего, что нет никакого смысла использовать это макро вместо нумерала?
        или я один не знаю сакрального смысла общеизвестной «ошибки №13»?
        Ответить
        • Ошибка переполнения дюжины, в простонародии - чертова ошибка.
          Ответить

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