在我的示例中,如何针对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 )
}