Кресты / Говнокод #2836 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 whiskey, (Updated )

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

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

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

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

    жалко, что производители видеокарты щас в тандеме с МС...
    Ответить
  • Да плевать, кроме самих мс этими функциями никто не пользуется.
    Ответить
  • Все нормально. Мелкиесофсткие ошибки у всех есть.
    Ответить
  • Это библиотека только для куллхацкеров!
    Ответить
  • Значит при определении 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 никогда не определялся и вреда не приносил :). Бдите!
        Ответить

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

Из-за тебя ушел bormand, guest!

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


    8