史前史:
我们刚刚将开发环境从VC ++ 2008切换到了VC ++2015。此后,我们发现了一个问题:尽管在C ++代码中测试了除法器,程序仍将除以0。
测试代码:
#include <cstdlib>
int test(int n, int test_for_zero)
{
int result = 0;
for (int i = 0; i < n; ++i) {
if (test_for_zero)
result += rand() >> ((8 % test_for_zero) * test_for_zero);
}
return result;
}
int main()
{
return test(rand(), rand() & 0x80000000);
}
Run Code Online (Sandbox Code Playgroud)
由具有默认发布选项的VC ++ 2015 Update 3或VC ++ 2017编译,运行时它将除以零。VC 2008编译运行良好。
分析:
; 6 : for (int i = 0; i < n; ++i) {
test edi, edi
jle SHORT …
Run Code Online (Sandbox Code Playgroud) divide-by-zero compiler-optimization visual-c++ visual-studio-2015 visual-studio-2017
visual-c++ ×1