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

    +63.6

    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
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    D3DXINLINE
    D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf )
    {
    #ifdef D3DX_DEBUG
        if(!pf)
            return;
    #endif
    
        x = pf[0];
        y = pf[1];
    }
    
    D3DXINLINE
    D3DXVECTOR2::D3DXVECTOR2( CONST D3DXFLOAT16 *pf )
    {
    #ifdef D3DX_DEBUG
        if(!pf)
            return;
    #endif
    
        D3DXFloat16To32Array(&x, pf, 2);
    }
    
    D3DXINLINE BOOL
    D3DXVECTOR3::operator == ( CONST D3DXVECTOR3& v ) const
    {
        return x == v.x && y == v.y && z == v.z;
    }
    
    D3DXINLINE BOOL
    D3DXVECTOR3::operator != ( CONST D3DXVECTOR3& v ) const
    {
        return x != v.x || y != v.y || z != v.z;
    }

    Во-первых, классный "режим отладки". Если D3DX_DEBUG определён, то при нулевом указателе pf происходит тихий возврат. Совершенно, так сказать, по-английски. А вот анализ второй функции показывает, что данный исходник вообще не получится собрать с D3DX_DEBUG. Наглядная иллюстрация вреда тупого копипаста. Определения операторов == и != демонстрируют, как не надо сравнивать вещественные числа.
    Кто же автор этого безобразия? Имя не известно, зато известно место работы. Ибо этот "код" полностью представлен в файле d3dx9math.inl от компании Microsoft.

    Запостил: whiskey, 22 Марта 2010

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

    • Объясните, пожалуста, почему в Windows коде пишут такими большими буквами?
      Ответить
      • Большими буквами пишут макросы. А наши мягкие друзья их очень любят.
        Ответить
        • Макросы, это понятно, но неужели у них так весь код написан?
          Читать же не удобно.
          Ответить
          • у майкрософта имена типов пишутся большими буквами.

            макросов в коде как бы и нет
            Ответить
        • мелкие любят венгерскую нотацию, от которой аж блевать хочется
          Ответить
          • _системную_ венгерскую нотацию. Есть большая разница.
            Ответить
    • краска для валос у них светлое слишком
      Ответить
      • гэнать не надо, краска в индий разный очень на цвет, вкус и запах
        Ответить
    • вот поэтому я юзаю опенгл всегда.

      его очень удобно инкапсулировать в какие угодно архитектуры.
      а директ3д - кривое негибкое месиво

      жалко, что производители видеокарты щас в тандеме с МС...
      Ответить
    • Да плевать, кроме самих мс этими функциями никто не пользуется.
      Ответить
    • Все нормально. Мелкиесофсткие ошибки у всех есть.
      Ответить
    • DX - тру библиотека.
      Ответить
      • Иди в жопу, быдло! Ничего не понимаешь! Восслався наш истинно верный OpenGL.
        Ответить
      • DX - это CloseGL.
        Ответить
    • Это библиотека только для куллхацкеров!
      Ответить
    • Значит при определении D3DX_DEBUG туда разрешено передавать NULL, и оно не меняет координаты - логично.
      И почему исходник не получится собрать с D3DX_DEBUG, поясните пожалуйста.
      Сравнение вещественных чисел на точное совпадение - вполне допустимая операция, будет определять копии.
      Ответить
      • Виноват, вкралась ошибка. Вот то, из-за чего не будет собираться:

        D3DXINLINE
        D3DXVECTOR2::D3DXVECTOR2( FLOAT fx, FLOAT fy )
        {
        #ifdef D3DX_DEBUG
        if(!pf)
        return;
        #endif

        x = fx;
        y = fy;
        }
        Ответить
        • Да, косячок-с... Значит D3DX_DEBUG никогда не определялся и вреда не приносил :). Бдите!
          Ответить

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