Няшная / Говнокод #13322 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
#define InlineIsEqualGUID(rguid1, rguid2)  \
        (((unsigned long *) rguid1)[0] == ((unsigned long *) rguid2)[0] &&   \
        ((unsigned long *) rguid1)[1] == ((unsigned long *) rguid2)[1] &&    \
        ((unsigned long *) rguid1)[2] == ((unsigned long *) rguid2)[2] &&    \
        ((unsigned long *) rguid1)[3] == ((unsigned long *) rguid2)[3])

Windows SDK, guiddef.h

ret = InlineIsEqualGUID(&g_guid, guid_array + i); /* ??? */

Запостил: serg_ik serg_ik, (Updated )

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

    • Это не сишка, а говно, причем тотальное. Мало того, что питухи не осилил stdint.h, указатели, мозги и саму сишку. Я всё удивляюсь - откуда берут таких животных, которые это пишут.
      Ответить
  • не ожидал что в некрософте, в официальных хидерах, будут переизобретать memcmp() (который IIRC некрософтовый родной компилер уже как хез давно, в случае мелких констных размеров, умеет инлайнить).
    Ответить
    • Это говно хоть раз было сишным конпелятором? Чёт я не помню того. А хедеры разве написанны в си-стайле? Нет, в питушачьем недопаскаль-недостайле. Чему ты удивляешься?
      Ответить
      • Питушок, который минусанул. Маздайский конпелятор - самый тормазной, ущербный и малофичный, созданный бездарями кусок говно, который нормально не поддерживает не один стандарт. Это говно даже Си-конпелятором не называется.

        Либо я не прав? И это говно хотябы один стандарт поддерживает?
        Ответить
        • > И это говно хотябы один стандарт поддерживает?
          C89 вроде как в нем все-таки есть.
          Ответить
          • В том и суть, что вродекак. Ладно, если он реально в нём есть, то я даже соглашусь, что 20лет назад это могло быть не полным говном.
            Ответить
  • > ret = InlineIsEqualGUID(&g_guid, guid_array + i); /* ??? */
    В чем вопросики заключаются, если не секрет?

    Из минусов кода:
    - Железобетонная привязка к 32 битному unsigned long. Из-за таких, простите, питушков, мс и оставило long 32 битным даже на x86-64.
    - Макрос назван как функция (не капсом), но в то же время вычисляет свои аргументы от 1 до 4 раз. Может привести к веселым последствиям, если кто-то "оптимизирует" код, и подставит вызов функции в один из параметров макро.
    Ответить
    • >В чем вопросики заключаются, если не секрет?
      Раскрой маркос. Там rguid не обернуты скобками
      Ответить
      • > Раскрой маркос. Там rguid не обернуты скобками
        А ну да, туплю, вы правы. Оно еще и забагует на guid_array + i, смещаясь по 4 байта вместо 16...

        В любом случае аффтар сего макроса не знал основ макроёбства 🙂
        Ответить
        • > А ну да, туплю, вы правы. Оно еще и забагует на guid_array + i, смещаясь по 4 байта вместо 16...
          Собственно после встречи с этой "фичей" IRL захотелось поделиться этой макрой.
          Ответить
          • Жопа еще и в том, что они назвали это макро без капса, в стиле функции. Я бы так и думал, что это функция, пока бы не навел курсор на ее имя или не прыгнул бы на определение...
            Ответить
          • P.S. Где-то тут проскакивало еще одно забавное определение от майкрософта:
            #define interface struct
            ...
            // ради вот этого дерьма в описаниях COM интерфейсов
            interface SomeShit {
            };
            ...
            // ломаем весь код в котором есть слово interface
            class interface {
            };
            class Some {
                Other interface() { ... }
            }
            Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8