c – 为什么这个被零除错误只出现在优化代码中?

我刚刚发现了一个奇怪的错误,只有在打开优化(g -O2)时才会发生.当interval设置为零(从命令行参数)时,以下代码中是Arithmetic异常:

for(int i = 0; i < n; ++i) {
  if((i + 1) % interval == 0) { // exception here
    DoSomething();
  }
}

很明显,模零操作会抛出一个被零除的异常,但为什么只有在代码编译时才会启用优化?

最佳答案
除以零始终是未定义的行为.使用不同的优化设置获得不同结果的事实仍然适合未定义行为的定义.

转载注明原文:c – 为什么这个被零除错误只出现在优化代码中? - 代码日志