ゼロ除算例外のキャッチ
C でゼロ除算を試みた場合、コンパイラまたはランタイムが自動的に例外をスローするわけではありません。 。動作は未定義です。つまり、例外やその他の予期しない結果が発生する可能性があります。
提供されたコード スニペット内:
int i = 0; cin >> i; try { i = 5/i; } catch (std::logic_error e) { cerr << e.what(); }
コードは、分割しようとするときに例外をキャッチしません。標準 C では整数のゼロ除算は例外とみなされないため、ゼロによる除算が行われます。
これを処理するには、ゼロによる除算条件を手動でチェックする必要があります。それに応じて例外をスローします。 C 標準ではゼロ除算の例外を明示的に定義していないため、次のような例外をスローすることを選択できます。
これは、変更されたコード スニペットです。ゼロ除算例外のスローを示します:
int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } try { i = intDivEx(5, 0); // Will throw an overflow_error exception } catch (std::overflow_error &e) { cerr << e.what() << endl; }
この例では、 intDivEx 関数はゼロ除算をチェックし、発生した場合は std::overflow_error 例外をスローします。これにより、コード内で例外を処理できるようになります。
以上がC でゼロ除算エラーを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。