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

    −5

    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
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    // CPP/Windows/Defs.h
    
    #ifndef __WINDOWS_DEFS_H
    #define __WINDOWS_DEFS_H
    
    #include "../Common/MyWindows.h"
    
    #ifdef _WIN32
    inline bool LRESULTToBool(LRESULT v)
    { return (v != FALSE); }
    
    inline bool BOOLToBool(BOOL v)
    { return (v != FALSE); }
    
    inline BOOL BoolToBOOL(bool v)
    { return (v ? TRUE: FALSE); }
    #endif
    
    inline VARIANT_BOOL BoolToVARIANT_BOOL(bool v)
    { return (v ? VARIANT_TRUE: VARIANT_FALSE); }
    
    inline bool VARIANT_BOOLToBool(VARIANT_BOOL v)
    { return (v != VARIANT_FALSE); }
    
    #endif

    Скопипастино из исходников 7zip (прости, Игорь Павлов).
    Этот код выглядит, как ебаный пиздец.

    Запостил: Graviton, 15 Февраля 2017

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

    • Я люблю 7zip
      Ответить
    • Пиздец не в коде, а в зоопарке из 100500 разных булов и статус-кодов. Тлен и безысходность.

      З.Ы. А что конкретно тебе тут не нравится кроме скобочек?
      Ответить
      • Вместо LRESULTToBool, BOOLToBool и тд, я бы предпочел соответственно LRESULT_to_bool, BOOL_to_bool... Просто там есть еще тип Bool, который определен, как int. Поэтому вышеуказанные имена могут сбить с толку. Если уж извращаться, так извращаться.

        З.Ы. Кстати, если бы ты мне не напомнил про скобочки, то я бы их так и не заметил. Вот нахуя они там нужны?
        Ответить
        • Ну если у него во всем проекте ТакоеСоглашение, то куда деваться? Или не во всем?
          Ответить
          • Да какие уж там соглашения. Весь код архиватора похож на "хуй пойми что", создается впечатление, что он писал его "на отъебись". Код еще плохо документирован, я думаю, что ему самому его сложно поддерживать.
            Ответить
    • Кстати, в крестах можно было бы сократить количество названий функций, воспользовавшись перегрузкой (несовместимо с чистой сишкой):
      inline bool ToBool(LRESULT v)
      { return (v != FALSE); }
      
      inline bool ToBool(BOOL v)
      { return (v != FALSE); }
      
      inline BOOL ToBOOL(bool v)
      { return (v ? TRUE: FALSE); }
      
      inline VARIANT_BOOL ToVARIANT_BOOL(bool v)
      { return (v ? VARIANT_TRUE: VARIANT_FALSE); }
      
      inline bool ToBool(VARIANT_BOOL v)
      { return (v != VARIANT_FALSE); }
      Ответить
      • Осторожней с этим, внутри BOOL'а таится int. Перегрузка поломается, если ещё какой-нибудь основанный на int'е тайпдеф добавишь.
        Ответить
    • BOOLToBool, BOOLToBoOl, BOOLToBOol, BOOLToBOoL, BOOLToBoOL.
      Ответить
    • разве по стандарту неявное преобразование bool->Integral не преобразует true->1?
      Ответить
      • > true->1
        Но ведь VARIANT_TRUE - это -1. Так что лучше уж константами через тернарник, чем какой-нибудь неведомый баг. С винапишным говном лучше всегда быть настороже.
        Ответить
        • У Микрософта ещё в Quick Basic логическая единица была равна -1. Да, все биты были установлены.

          В это же время в реализациях других ЯП было принято устанавливать только младший бит (true — это 1).

          Кто знает, может быть, найдётся и ЯП, в котором принято устанавливать старший бит...
          Ответить
          • -1 для масок удобно юзать.
            Ответить
            • Кстати, все установленные биты — это не всегда -1.

              Чисто теоретически сишку можно реализовать не только в (двойном) дополнительном коде, но и в обратном (первом дополнительном), и в «прямом» (sign+magnitude).

              В обратном (one's complement) все единицы — это минус ноль, а в «прямом» все единицы — это минус maxint.

              http://stackoverflow.com/questions/12276957/are-there-any-non-twos-complement-implementations-of-c
              Ответить
              • P.S. А ведь гипотетически масса библиотек несовместима с UNISYS. Мы настолько привыкли к two's complement...
                Ответить
        • ну збс. А завтра этот -1 апкастнется в unsigned высшей разрядности и у нас будет что? Буль Шредингера
          Ответить
          • К слову, в винапи есть функция, которая возвращает три(!) разных значения через бедный BOOL - ноль, не ноль и -1.
            Ответить
            • ... когда пишешь код для Windows в 5 и идешь на гомосексуальную свиданку с сатаной в 7
              Ответить
    • Spam, bacon, sausage and Spam
      Spam, egg, Spam, Spam, bacon and Spam
      Ответить
    • требуется больше булов


      во времена моего увлечения яблоками, я знал чем отличаются BOOL / bool / Boolean / NSCFBoolean
      http://nshipster.com/bool/
      Ответить
      • Боже, я пойду и поставлю тебе свечку (да, ту самую, да, туда) за то, что я не связался в своё время с этим NS-ёбством.
        Впрочем, сейчас у меня есть ангулар, так что свечку как-нибудь в другой раз. да.
        Ответить
        • )на самом деле там всё не так плохо, нужно просто привыкнуть. Даже в мое время писать на ObjC было, в принципе, терпимо.
          А уж теперь там генерики, ARC, и вообше swift. Всяко лучше чем JavaScript, да.
          Ответить
        • Кстати, префикс NS есть не только у яблочной компании (от Next Step), но и у Мозиллы (от Netscape).

          Интересно, как выглядят исходники порта Фуррифокса под Макось.
          Ответить
          • Фуря не имеет права юзать NS: это как-бы застолблено за Foundtation же.

            ps: и вообще
            разве фуря не на крестах? в крестах же намеспайсы е
            Ответить
            • Берём первый попавшийся файл из фури:
              https://github.com/mozilla/gecko-dev/blob/master/parser/htmlparser/nsHTMLTags.h
              Ответить
            • > Фуря не имеет права юзать NS: это как-бы застолблено за Foundtation же.
              Что? Типа префикс NS запатентован яблоком?
              Ответить
    • > MyWindows.h

      Говорят, теперь правильно говорить ThisWindows.h
      Ответить
    • Смотри, я… вот у нас здесь мух много… ой-ой… мух много, понимаешь? Смотри, мухи, они тебе спать мешают, мухи. А я вот, давай я здесь насру, и они все прилетят сюда, и мы их убьем, слышишь? И тебе тогда спать, ой, спать будет хорошо. Давай? Я насру, а мухи все прилетят, сюда, к нам. Ну, куда им ещё, ихнее место-то тока здесь, и… ооой… хочешь, я насру здесь? И мухи, и мы их убьем! Ну что, срать?
      Ответить
      • Багор, чего ты так объелся, что тебя срать потянуло?
        Ответить
        • Ты просто не смотрел этот замечательный фильм
          Очень рекомендую
          Ответить
    • http://i8.youcomedy.me/0/7/big_088801ad99717a5f7ff78a1b122fa670.jpg
      Ответить
    • typedef bool ToBool;
      ToBool BoolToToBool(bool);
      bool ToBoolToBool(ToBool);
      Ответить
      • typedef bool CoBool;
        CoBool BoolToCoBool(bool);
        bool CoBoolToBool(CoBool);
        Ответить

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