hoge diary - September 17, 2004

[C++] C++ 例外の怪

エラー処理を C++ の例外を用いて次のような感じで記述したところ... catch されずにそのまま abort しました.

使用したコンパイラは gcc 3.4.1 です.

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
  try
  {
    cout << "throw" << endl;
    throw;
  }
  catch (...)
  {
    cout << "caught" << endl;
  }
  return 0;
}

catch (...) とすることで,あらゆる種類の例外を捕捉できると記憶していたのですが...

次のように記述することで,正しく捕捉されました.

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
  try
  {
    cout << "throw" << endl;
    throw 1;
  }
  catch (int)
  {
    cout << "caught" << endl;
  }
  return 0;
}

throw には式を与えるようにします.

なお,次のコードで発生させた floating point 例外は捕捉されませんでした.

#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
  try
  {
    cout << "throw" << endl;
    cout << 10 / 0 << endl;
  }
  catch (...)
  {
    cout << "caught" << endl;
  }
  return 0;
}
% ./a.out
throw
zsh: 20268 floating point exception  ./a.out
%

何なんでしょうね.

コメント

名前(何でも可):

テキスト(http:// を含む内容は投稿できません):

トラックバック

トラックバック URI: https://www.pakunet.jp/hoge/trackback/2004091702

トラックバックはありません.


Valid XHTML 1.1! Valid CSS!
© 2004-2009 ぱくちゃん.
Last modified: Sun Nov 04 10:38:44 JST 2007