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

    +135.2

    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
    inline void clearbufshort (void *buff, unsigned int count, WORD clear)
    {
            if (!count)
                    return;
            SWORD *b2 = (SWORD *)buff;
            if ((int)b2 & 2)
            {
                    *b2++ = clear;
                    if (--count == 0)
                            return;
            }
            do
            {
                    *b2++ = clear;
            } while (--count);
    }

    Наткнулся на такой вот шедевр в коде ZDaemon. Это аналог memset, только заполняет не байтами, а словами.

    Кстати, там же рядом есть функция, запполняющая двойными словами:

    inline void clearbuf (void *buff, int count, SDWORD clear)
    {
    SDWORD *b2 = (SDWORD *)buff;
    while (count--)
    *b2++ = clear;
    }

    Запостил: Arseniy, 13 Февраля 2010

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

    • Особенно доставляет:
      1)Изобретение кривого велосипеда.
      2)inline для гигантской функции.
      Ответить
      • ну inline здесь не страшен, ибо компилятор его отвергнет по двум причинам - 1) множественный return 2) циклы

        а в остальном да, довольно криво
        Ответить
        • >ну inline здесь не страшен, ибо компилятор его отвергнет по двум причинам
          А может и не отвергнет. Не нужно ообобщать. Компиляторы разные бывают.
          Ответить
          • Ну, вообще-то, "inline" действительно является лишь "рекомендацией" компилятору inline-ить функцию. Если компилятор настолько глуп, что не может адекватно понять, когда действительно надо, а когда не надо inline-ить, то боюсь у такого компилятора любой генерённый код будет очень тормозным.
            Ответить
      • Я согласен, что вилосипед какой-то очень кривой. Но в самой идее изобретения этого не совсем то и "вилосепеда", я не вижу ничего плохого. Многие libc работают по-char-но, а если массив большой (более 7 символов), то обычно выгоднее работает алгоритм, который работает по-int-ово. Тем более когда массив символов 100, то по-char-ный алгоритм работает вообще в разы медленее.

        Хотя говнокод этот я плюсану)
        Ответить
    • Говнокод к тому же с ошибкой.
      Ответить

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