在 g++ 10.2 中 0 除以 0 结果为 1
0 divided by 0 results in 1 in g++ 10.2
以下代码在使用 g++
10.2 编译时打印 gcc says: 0 / 0 equals 1
:
#include <iostream>
int main() {
int a = 0;
std::cout << "gcc says: 0 / 0 equals " << (a / a) << std::endl;
return 0;
}
- 应该是这样的吗? (使用
clang
编译并执行 returns 136 - 错误的算术运算)。
- 这是某种代码优化的结果吗?
- 有没有办法让这个错误?
编辑:使用 -fsanitize=undefined
编译会使 g++
产生运行时错误。感谢@chris.
除以零是未定义的行为。编译器将继续做任何使代码 运行 最快的事情。而且它甚至不会保持一致。
没有办法使这个结果导致编译器错误,因为编译器在编译时并不总是知道分母是否为 0。你必须自己做检查。
以下代码在使用 g++
10.2 编译时打印 gcc says: 0 / 0 equals 1
:
#include <iostream>
int main() {
int a = 0;
std::cout << "gcc says: 0 / 0 equals " << (a / a) << std::endl;
return 0;
}
- 应该是这样的吗? (使用
clang
编译并执行 returns 136 - 错误的算术运算)。 - 这是某种代码优化的结果吗?
- 有没有办法让这个错误?
编辑:使用 -fsanitize=undefined
编译会使 g++
产生运行时错误。感谢@chris.
除以零是未定义的行为。编译器将继续做任何使代码 运行 最快的事情。而且它甚至不会保持一致。
没有办法使这个结果导致编译器错误,因为编译器在编译时并不总是知道分母是否为 0。你必须自己做检查。