在将我们的 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
似乎来自 a 中的简单使用,float
并且C4056
似乎是隐式转换为 a 的结果double
。
我可以通过包含odeconfig.h
in #pragma warning push
/来简单地忽略这些警告pop
,还是真的有什么不好的事情发生?
编辑:
查看旧设置后,之前使用的实现HUGE_VAL
定义在math.h中。