[ PR ] 完全無料!良い弁護士を厳選してご紹介!
テレビ・新聞メディア紹介多数。全国対応。まずはこちらをクリック!

C言語でtry-catchを実現する方法

2008年02月27日
【質問】
try, catch, throw による例外処理はメモリーの使用効率が悪いという理由で、 C のように関数の復帰値による例外処理をしている(*1)人達がいるのですが、本当に関数の復帰値による例外処理よりもメモリーの使用効率は悪いのでしょうか?
http://q.hatena.ne.jp/1204086672

【回答】
昔のC++は一回Cソースに変換してからコンパイルされてたという時代を知らないんだろうな。でも、そんなに効率悪いかな?実際のアッセンブラコードとかみて効率悪いと言ってるのかな?
「Cプリプロセッサで try, catch 風のマクロを定義して使ってる」・・・・
1. try する段階でスタック環境と実行状態を待避しておく。
2.例外が throw されたら、catch のあるところまでスタックを遡る。
だけで良いはず。
C言語には、標準ライブラリでスタック環境と実行状態の待避・復元を行う setjmp (3), longjump (3) 関数が提供されていますから、そう苦労せずに書けそうです。
  • except.h (ヘッダ)
  • except.c (実装)
  • sample.c (使用例)    

  •  とりあえず、Cでどう実装されてるか見てください。

     
    この記事へのコメント

    >>
    昔のC++は一回Cソースに変換してからコンパイルされてたという時代を知らないんだろうな。
    <<
    そういう時代があったことは知っていますが、そういう時代のコンパイラーを使ったことはありません。
    また、本質問で取り上げている人達が作っているシステムは、そういう時代のシステムではありません。

    Posted by しおり at 2008年02月27日 23:37

    コメントありがとうございます。
    書いている内容は、分かってるつもりです。

    try-catchするためには、最低限スタックを
    つんでおかないと駄目なのは今も昔も変わりません。

    Posted by qhatena at 2008年02月28日 00:17
    コメントを書く
    お名前: [必須入力]

    メールアドレス:

    ホームページアドレス:

    コメント: [必須入力]

    この記事へのトラックバックURL
    http://blog.seesaa.jp/tb/87427740

    この記事へのトラックバック