将我们的IDE从Visual Studio 2010(VC10)升级到Visual Studio 2013(VC12)后,我们使用dInfinity
(Open Dynamics Engine(ODE)中定义的宏)开始生成编译器警告:
C4056:浮点常数运算溢出
C4756:常数运算溢出
在 odeconfig.h (ode)
#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
来简单地忽略这些警告,还是真的发生了不好的事情?
修改:
查看旧设置后,之前的实现使用了 math.h 中定义的HUGE_VAL
。