2009-08-20 30 views
3

ゼロで除算するようなシステム例外が実際にアプリケーションに何か「スロー」するかどうかは不思議でした。何とかこれをデフォルトで捕まえることは可能でしょうか?C++でデフォルトの例外をキャッチ

は、私たちはヌル除数をチェックし、例外をスローするカスタム除算は、fnを定義することができます意味が、ちょうどこれはOSに依存します。この例外はデフォルト

//say I do this 
int i; 
try 
{ 
i /= 0; // My compiler (gcc) did warn abt the divide by zero :-) 
} 
catch (...) 
{ 
// Can we get here for this case? 
} 

答えて

3

によってスローされた場合、それはいいだろうと思いました。あなたはWindows上のVisual C++コードでそれを行うことができます - catch(...)は、Linuxのgccコンパイルされたコードではなく、0による除算、アクセス違反などを含むいわゆる構造化例外もキャッチします。

+3

ここで重要なのは、C++標準に関する限り、0で割ることは未定義の動作であるということです。これは、個々の実装が好きなことをすることができることを意味します。信号でプロセスを中断させ、例外をスローし、上司に電話をかけ、トフィーをコード化することはできません。 –

+0

Windowsの場合、SetUnhandledExceptionFilterを使用してハンドラをインストールすると、C++例外をスローすることができます。 std :: exceptionから派生したものです。 –

+0

Visual C++で/ EHaを0にするなどの設定をする必要があります。 http://msdn.microsoft.com/en-us/library/1deeycx5%28VS.80%29.aspx –

1

C++標準では、ゼロで除算すると例外がスローされるとは言わず、未定義の動作であると言います。また

、あなたが言う:あなたが割る事が一定であれば

i /= 0; // My compiler (gcc) did warn abt the divide by zero :-) 

コンパイラは警告のみを与えることができます。

関連する問題