C が整数のゼロ除算で例外をスローしないのはなぜですか?また、それをどのように処理すればよいでしょうか?
実行時ゼロ除算例外のキャッチ
問題ステートメント
指定されたコード スニペットでは、ゼロ除算は例外をトリガーしません。これはなぜ起こるのでしょうか?また、そのようなエラーに対して例外が確実にスローされるようにするにはどうすればよいですか?
説明
他の一般的なランタイム エラーとは異なり、標準 C では整数のゼロ除算は例外ではありません。浮動小数点の除算または剰余演算も、本質的に例外をスローしません。代わりに、2 番目のオペランドがゼロの場合、これらの操作は未定義の動作をします。これは、システムが例外のスロー、プログラムのクラッシュ、さらにはプログラムの範囲外のアクションの実行など、予期しない動作を行う可能性があることを意味します。
カスタム例外のスロー
標準 C では処理できないためゼロによる除算が例外として発生する場合、開発者はそのような条件を手動でチェックし、必要に応じてカスタム例外をスローする必要があります。たとえば、overflow_error または domain_error をスローして、ゼロ除算エラーを示すことができます。
コード例
次の変更されたコード スニペットは、カスタム intDivEx を使用してゼロ除算例外をキャッチする方法を示しています。関数:
#include <iostream> #include <stdexcept> // Integer division, catching divide by zero. inline int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } int main() { int i = 42; try { i = intDivEx(10, 0); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; try { i = intDivEx(10, 2); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; return 0; }
出力:
Divide by zero exception -> 42 5
このコードは正しくありますi の元の値を保持しながら、ゼロ除算例外をスローおよびキャッチします。
以上がC が整数のゼロ除算で例外をスローしないのはなぜですか?また、それをどのように処理すればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
