小编Ily*_*nov的帖子

用循环优化VC ++ 2015除以零

史前史:

我们刚刚将开发环境从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

5
推荐指数
1
解决办法
110
查看次数