0除以0在g++10.2中得到1

gcc says: 0 / 0 equals 1使用g++10.2编译时打印以下代码:

#include <iostream>

int main() {
  int a = 0;
  std::cout << "gcc says: 0 / 0 equals " << (a / a) << std::endl;
  return 0;
}

在 Godbolt 上运行它

  • 应该是这样吗?(编译clang并执行它返回 136 - 错误的算术运算)。
  • 这是某种代码优化的结果吗?
  • 有没有办法使这个错误?

编辑:有编译-fsanitize=undefined品牌g++产生一个运行时错误。感谢@chris。

回答

除以零是未定义的行为。编译器将继续做任何使代码运行最快的事情。它甚至不会一致。

没有办法使这个结果导致编译器错误,因为编译器在编译时并不总是知道分母是否为 0。您必须自己进行检查。


以上是0除以0在g++10.2中得到1的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>