提问者:小点点

如何在C++中检测有符号和无符号整数的错误减法?


我有一个遗留代码执行有符号int与无符号int的减法,并将结果转换为一个浮点数。它给出了Visual Studio 6到2013年的预期结果。对于Visual Studio 2017(15.6.3),结果不是预期的结果。我将代码简化为:

    unsigned int uint = 10;
    signed int sint = 9;
    signed int res = sint - uint;
    float fres = static_cast<float>(sint - uint);

对于我测试过的所有VS,res值都是-1。对于VS 2013及之前,fres值为-1。对于VS 2017,fres值为4.29496730e+09,即UINT_MAX。我在这里发现,VS 2017中的fres结果是符合C++11标准的结果(如果我正确理解的话)。VS2017编译器不会对此发出任何警告。

我怎样才能检测到在我的代码库中发生的所有这样一个糟糕的减法?


共1个答案

匿名用户

使用编译器时,您正在查找编译器选项。

对于VC++,您应该根据以下来源打开编译器选项:

https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4245?view=msvc-160

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(何在|c++|中|检测|符号|符号|整数|减法)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?