いつもお世話になります。

C、C++のプログラムで質問です。
ゼロ演算を行うと例外が発生すると思いますが、ゼロ演算エラーをハンドリングするプログラムを
書くことはできるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2008/10/07 23:18:58
  • 終了:2008/10/08 21:44:50

回答(2件)

id:aki1960 No.1

aki1960回答回数256ベストアンサー獲得回数82008/10/08 00:59:40

ポイント35pt

C++ならできます。

以下のURLをご参照ください。

http://www.geocities.jp/ky_webid/cpp/language/025.html

id:I_I_I_I_eb1

ありがとうございます。

2008/10/08 21:43:58
id:ardarim No.2

ardarim回答回数892ベストアンサー獲得回数1422008/10/08 01:07:15

ポイント40pt

Windowsの場合ですが。

構造化例外処理を実装することで、ゼロ除算などの例外処理をトラップして適切な処理をさせるようにすることができます。

VC++構造化例外メモ(Hishidama's VC++2005 SEH Memo)


ゼロ除算だけに限れば、分母が0かどうか割る前にチェックするというのが鉄板ですが...

  • id:zzz_1980
    /*
    どこでとんだか判別不能
    */
    #include <stdio.h>
    #include <signal.h>
    void function(int);
    int main(int argc,char *argv[])
    {
    int a = 0;
    int b = 0;
    int c;
    signal(SIGFPE,function);
    c = a / b;
    return 0;
    }
    void function(int x)
    {
    printf("signal = %d\n",x);
    exit(1);
    }
    /* end of sample.c */
  • id:aki1960
    ちなみに0除算エラーは、プロセッサ的には0で割らなくても(除数が0以外でも)発生するので「0割」という言葉に惑わされないよう注意が必要です。
    プロセッサ内部にとっては、商が指定されたレジスタに収まらない場合のオーバーフローエラーで、これを便宜的に「0割エラー」と言っているに過ぎません。
    よって、割る前に除数が0かどうかをチェックするというのは、必要な処理ですが、システムによっては完全ではありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません