11

出于测试原因,我想在我的 C++ 代码中除以零。我写了这段代码:

int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;

我看到屏幕上打印了“int =9”,但应用程序没有崩溃。是因为一些编译器优化(我用 gcc 编译)吗?可能是什么原因?

4

4 回答 4

17

制作变量volatile。对 volatile 变量的读取和写入被认为是可观察的:

volatile x = 1;
volatile y = 0;
volatile z = x / y;
于 2010-10-05T14:15:24.113 回答
14

因为y没有被使用,所以它正在被优化掉。
尝试cout << y在末尾添加一个。

或者,您可以关闭优化:

gcc -O0 file.cpp
于 2010-10-05T12:40:36.660 回答
2

除以零是未定义的行为。不崩溃也几乎是未定义行为领域中潜在无限数量的可能行​​为的适当子集。

于 2010-10-05T14:37:16.480 回答
-1

Typically, a divide by zero will throw an exception. If it is unhandled, it will break the program, but it will not crash.

于 2010-10-05T12:42:43.653 回答