如何避免Microsoft C26451(算术溢出)警告



在我的示例中,如何针对Microsoft C26451(算术溢出(警告进行防御编码?我觉得这应该是微不足道的修复。太令人沮丧了!

// Linear interpolation
// target  - the target point, 0.0 - 1.0
// x...    - two values {X1} {X2}
inline static double Linear(float target, double x1, double x2) {
return (target * x2) + ((1.0 - (double)target) * x1);
}

我通读了算术溢出:使用运算符'*';在4字节值上,然后将结果强制转换为8字节值,但似乎无法修复我的C26451警告:";算术溢出:对4字节的值使用运算符"-",然后将结果强制转换为8字节的值。在调用运算符"-"之前将值强制转换为更宽的类型以避免溢出(io.2(。

我该怎么做才能删除警告?

微软文档对他们的编译错误并没有真正的帮助。https://learn.microsoft.com/en-us/cpp/code-quality/c26451

编译器警告没有意义,较新的Visual Studio版本也不会给出相同的警告。我只会为这条线路禁用它:

inline static double Linear(double target, double x1, double x2) {
#pragma warning( push )
#pragma warning( disable : 26451 )
return (target * x2) + ((1.0 - target) * x1);
#pragma warning( pop )
}

相关内容

  • 没有找到相关文章

最新更新