После обновления нашей IDE с Visual Studio 2010 (VC10) до Visual Studio 2013 (VC12) наше использование dInfinity
макрос, определенный в Open Dynamics Engine (ODE), начал генерировать предупреждения компилятора:
C4056: переполнение в арифметике с плавающей точкой
C4756: переполнение в постоянной арифметике
В odeconfig.h (Ода)
#ifdef INFINITY
#define dInfinity INFINITY
#elif defined(HUGE_VAL)
#ifdef dSINGLE
#ifdef HUGE_VALF
#define dInfinity HUGE_VALF
#else
#define dInfinity ((float)HUGE_VAL)
#endif
#else
#define dInfinity HUGE_VAL
#endif
#else
#ifdef dSINGLE
#define dInfinity ((float)(1.0/0.0))
#else
#define dInfinity (1.0/0.0)
#endif
#endif
В math.h (VC12; Там есть комментарии из заголовочного файла, я их там не добавил.)
#define _HUGE_ENUF 1e+300 /* _HUGE_ENUF*_HUGE_ENUF must overflow */
#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF)) /* causes warning
C4756: overflow in constant arithmetic (by design) */
Предыдущая версия, вероятно, использовала HUGE_VAL
который не спам предупреждений.
C4756
кажется, происходит от простого использования в float
а также C4056
кажется результатом неявного преобразования в double
,
Могу ли я просто игнорировать эти предупреждения, включив odeconfig.h
в #pragma warning push
/pop
или действительно что-то плохое происходит?
редактировать:
После просмотра старой настройки использовалась предыдущая реализация HUGE_VAL
определяется в math.h.
Задача ещё не решена.