升级到VC12后,我可以忽略来自ODE的警告C4056和C4756吗?

时间:2015-05-12 13:07:59

标签: c++ compiler-warnings ode-library

将我们的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

0 个答案:

没有答案