c – 为什么这个被零除错误只出现在优化代码中?
发布时间:2020-12-16 10:40:09 所属栏目:百科 来源:网络整理
导读:我刚刚发现了一个奇怪的错误,只有在打开优化(g -O2)时才会发生.当interval设置为零(从命令行参数)时,以下代码中是Arithmetic异常: for(int i = 0; i n; ++i) { if((i + 1) % interval == 0) { // exception here DoSomething(); }} 很明显,模零操作会抛出一
我刚刚发现了一个奇怪的错误,只有在打开优化(g -O2)时才会发生.当interval设置为零(从命令行参数)时,以下代码中是Arithmetic异常:
for(int i = 0; i < n; ++i) { if((i + 1) % interval == 0) { // exception here DoSomething(); } } 很明显,模零操作会抛出一个被零除的异常,但为什么只有在代码编译时才会启用优化? 解决方法
除以零始终是未定义的行为.使用不同的优化设置获得不同结果的事实仍然适合未定义行为的定义.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |