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 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

通常、ゼロ除算は例外をスローします。処理されていない場合、プログラムは中断されますが、クラッシュすることはありません。

于 2010-10-05T12:42:43.653 に答える