From: 閑舎 <raku@...>
Subject: [TSfree:146] Re: C++ の catch & throw
Date: Wed, 24 Apr 2002 14:15:44 +0900 (JST)
Message-ID: <20020424141544P.raku@...>
> Cygwin DLL 1.3.10 に g++ version 2.95.3-5 にて、動作確認しました。どうも
> ありがとうございます。
いえいえ,間違った事ばっかり書いてしまってお恥ずかしい,
いろいろ試して私も勉強になりました.
void ThrowFunc() throw (char *) {
const char *errstr = "Exception";
throw errstr;
}
や,
void ThrowFunc() throw (char *) {
throw 1;
}
だとコンパイルは通るけどダメです.
結局,throw の宣言と,
実際に throw するものが違ってもコンパイルは通るみたいです.
しかし,実行時にエラーになります.
教訓
1) "..." は const char * 型である.
2) C++ コンパイラは throw の型チェックはしない.
java ではメソッドが投げる可能性のある例外を全て
throws で宣言することになっているので,
コンパイル時に型チェックされますが,
C++ では宣言が必須でないので型チェックできないのでしょう.
> Cygwin で catch & throw を実行
> してみると、Segmentation Fault になったりします。
この実行時エラーはコンパイラによって
ちゃんと implement されたエラーなので,
Segmentation Fault とは異なるはずです.
Segmentation Fault は他の原因があるのではないかと...
-----------------------------
廣島 勉
(tsutomu@...)