1

在将我们的 IDE 从 Visual Studio 2010 (VC10) 升级到 Visual Studio 2013 (VC12) 后,我们使用dInfinityOpen 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.hin #pragma warning push/来简单地忽略这些警告pop,还是真的有什么不好的事情发生?

编辑

查看旧设置后,之前使用的实现HUGE_VAL定义在math.h中。

4

0 回答 0