テスト上の理由から、C++コードでゼロ除算を実行したいと思います。私はこのコードを書きました:
int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;
画面に「int=9」と表示されますが、アプリケーションがクラッシュしません。いくつかのコンパイラの最適化(私はgccでコンパイルします)が原因ですか?理由は何でしょうか?
テスト上の理由から、C++コードでゼロ除算を実行したいと思います。私はこのコードを書きました:
int x = 9;
cout << "int x=" << x;
int y = 10/(x-9);
y += 10;
画面に「int=9」と表示されますが、アプリケーションがクラッシュしません。いくつかのコンパイラの最適化(私はgccでコンパイルします)が原因ですか?理由は何でしょうか?
変数を作成しますvolatile
。揮発性変数の読み取りと書き込みは、監視可能と見なされます。
volatile x = 1;
volatile y = 0;
volatile z = x / y;
使用されていないためy
、最適化されています。
最後にを追加してみてくださいcout << y
。
または、最適化をオフにすることもできます。
gcc -O0 file.cpp
ゼロによる除算は未定義の動作です。クラッシュしないことは、未定義の動作のドメインで発生する可能性のある動作の潜在的に無限の数の適切なサブセットでもあります。
通常、ゼロ除算は例外をスローします。処理されていない場合、プログラムは中断されますが、クラッシュすることはありません。