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

    −21

    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
    // winnt.h
    typedef wchar_t WCHAR;
    typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
    
    // winldap.h
    #define ldap_init ldap_initW
    WINLDAPAPI LDAP *LDAPAPI ldap_initW(const PWCHAR HostName,ULONG PortNumber);
    
    // my code
    // auto ldap = ldap_init(L"ldap.address", LDAP_PORT); // 1
    
    PWCHAR hostName = (WCHAR*)(L"ldap.address"); // 2
    auto ldap = ldap_init(hostName, LDAP_PORT);
    
    // auto hostName = L"ldap.address"; // 3
    // auto ldap = ldap_init(hostName, LDAP_PORT);

    Вариант (1) выдает warning. Вариант (2) работает ожидаемо. Вариант (3) ожидаемо не компилится. Вопрос: и почему это я не люблю winapi?

    Запостил: Antervis, 07 Ноября 2016

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

    • В "PHP" такой хуйни нет.
      Ответить
    • У меня второе тоже даёт варнинг про «discards const»

      Хм. Можно сделать метушню, которая будет делать тип со снятым const с элементов массива. Затем завернуть её в макрос.

      И пользоваться как-то так:
      MUTABLE_ARRAY_FROM_LITERAL(hostName, L"ldap.address");
      auto ldap = ldap_init(hostName, LDAP_PORT);
      Ответить
      • gcc с -pedantic -Wall -Werror пропускает. Кошернее конечно const_cast делать, но там как ни делай это ппц
        Ответить
    • Если предположить, что ldap.address небольшой, я бы просто выделил место под него на стеке.
      WCHAR hostName[] = L"ldap.address";
      auto ldap = ldap_init(hostName, LDAP_PORT);

      P.S. Никогда не понимал, зачем все эти PWCHAR, LPWCH, PWCH, etc.
      Ответить
      • показать все, что скрытоКак это зачем?
        Чтоб со звездочкой не ибаца.
        Ответить
        • А зачем три разных? Чтобы было с чем ебаться?
          Ответить
        • > Чтоб со звездочкой не ибаца.

          О да, одну звёздочку написать гораздо труднее, чем букву P. Более того, со звёздочкой можно написать
          const WCHAR *str, а тупой алиас PWCHAR не получится использовать с const (const PWCHAR str означает уже совсем другое — константный указатель на неконстантную строку).

          В общем, лютая тупость.
          Ответить
          • Так нужно больше алиасов.
            WCHAR, CWCHAR, PWCHAR, CPWCHAR, PCWCHAR, CPCWCHAR, VWCHAR, CVWCHAR, PVWCHAR, PCVWCHAR, VPWCHAR, VPCWCHAR, VPVWCHAR, VPCVWCHAR, CVPWCHAR, CVPСWCHAR, CVPVWCHAR, CVPCVWCHAR.
            Вроде все назвал.
            Ответить
          • показать все, что скрытоВы просто ненавидите все микрософтофское
            Ответить
            • > Вы просто ненавидите все микрософтофское

              Microsoft Research is doing a good job!
              Microsoft Hardware тоже обычно молодцы.
              Ответить
              • >>> "Microsoft Research is doing a good job!"

                Job, который blow?
                Ответить
              • > Microsoft Hardware
                На днях полапал Майкрософт Натурал, которая эргономичная типа, вроде оригинальная... Основные кнопки норм, но пробел вообще отвратный, одной рукой прожимался со скрипом. Знакомый, который такую клаву юзает, сказал, что пробел на ней надо разрабатывать...

                Короче не впечатлило.
                Ответить
                • > Короче не впечатлило.
                  Ок, будем считать, что Microsoft Hardware тоже говно.
                  Ответить
                  • Это стало понятно после того, как оно из зависти к BSOD создали RROD
                    Ответить
                    • Кстати, статейку недавно читал про коробку 360. Майки там страшно сэкономили на памяти, поставили какое-то дерьмо, которое не тянуло номинальные частоты. Поэтому в бут-секторе был код, который подбирал максимально доступную на этих планках частоту...
                      Ответить
            • > все микрософтофское
              Майки бесят тем, что их вечно шатает из стороны в сторону... Умудряются понаплодить кучу технологий, перехреначить API и UI, распиарить их и через пару лет забальзамировать, периодически подпирая костылями.
              Ответить
              • Причём кое-что успевает попасть в бальзам, ещё не родившись: WinFS, Gazelle...

                На эту тему: https://en.wikipedia.org/wiki/Vaporware

                Вейперы и до программирования добрались.
                Ответить
              • Так фатальный нидастатак же
                Ответить
      • из паранойи, наверно. Что каждые несколько лет будут менять разрядность процессоров, размеры юникод-символов и прочего
        Ответить
      • > P.S. Никогда не понимал, зачем все эти PWCHAR, LPWCH, PWCH, etc.
        Дак существенная часть WinAPI тянется ещё из времён Windows 3.0. Тогда это и было оправдано. А сейчас взять и выкинуть это дерьмо Микрософт уже не может - обратная совместимость-с. Да и работы там столько, что Авгиевы конюшни - просто курорт.
        Ответить
        • > Тогда это и было оправдано.
          Чем?
          Ответить
          • far ptr
            Ответить
            • показать все, что скрытоVanished
              Ответить
              • > какой в пизду фар в 32 битах
                Far pointers was used in windows 3.x (16-bit). But new versions wants to remain source-compatible with 3.x by some degree, so they used same macro (AFAIK expanded to far ptr on 3.x and to normal ptrs on newer platforms)...

                Sorry for reply in english. I'm too lazy to learn how to switch layouts in XFCE.
                Ответить
                • At least I can listen to music on youtube and read GK in 800x600 resolution...
                  Ответить
                • В общем, в Win32 far pointers не использовали (их вспомнили позже, когда реализовали PAE), однако, код писали по-старому, но для far был макрос, разворачивавший его в пустую строку, а макросы с параметрами типа MK_FP, FP_OFF, FP_SEG сводились к тривиальной операции.

                  Напоминает английский язык, в котором номинально существуют части речи вроде причастий, деепричастий, герундиев, герундивов, а фактически в современном языке они по форме неотличимы от глагола.
                  Ответить
                  • В PAE всё же не совсем far.
                    там были 64битные поинтеры вроде, но там было как-то с ними совсем сложно, и потому MS запретил PAE в консьюмерских версиях винды.

                    PAE были только в серверах.

                    Ну и конечно тока для kernel mode
                    Ответить
                • показать все, что скрытоVanished
                  Ответить
                • >> какой в пизду фар в 32 битах
                  > Sorry for reply in english. I'm too lazy to learn how to switch layouts in XFCE.
                  It's obvious that you can paste other peoples' answers here. So why don't you reuse the letters from their messages?
                  Ответить
                • pishi translitom blyad
                  Ответить
                • i ustanovi yuniti vosem ili vindovs desyat
                  Ответить
                  • Да у меня просто драйвер нвидии перестал компилиться после очередного апдейта бубунты. А свежий драйвер не взлетел на 16.04. Пришлось до 16.10 обновиться, чтобы не ебаться с подбором драйвера. Теперь всё ок.
                    Ответить
                    • внезапно VESA умеет любую карту на достойной разрешении и милой глубине

                      просто нуоче медленно, ибо через бивис
                      Ответить
                • > Sorry for reply in english. I'm too lazy to learn how to switch layouts in XFCE.

                  use google.com, type phrases using russian layout, in search results google will convert letters
                  Ответить
                  • F z gjkmpe.cm 'nbv cthdbcjv:
                    http://winrus.com/klava.htm
                    (e ytuj tcnm gctdljybv porusski.net).
                    Ответить
                • блядь это же какой писать под виндуос с сегментной адресацией

                  Данные толще 64K нужно дробить, иначе адресная арифметика уроборосится.

                  Правда у борланда были huge, не знаю были ли у Microsoft C
                  Ответить

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