トップページ⇒tech
23コメント6KB

VC++例外処理教えてください!

■ このスレッドは過去ログ倉庫に格納されています
0001ATL大嫌いNGNG
VC++での例外処理で・・・
try{
char neme[5];
memcopy( &name[0], "aaaaaa", 6 );
}
catch(...){

}
上のようなソースでキャッチの時に
なんの例外がおきたか知りたいんですけど
キャッチは省略系以外使用不可で、
しかもMFCも使用不可という規則で縛られて
どうしたら良いかわかりません。
いろいろ調べたのですが、MFCを使用する方法と
Cの例外取得は判明したのですがC++の場合が
全然乗ってないんですよ。
どうかご教授願います。
(上の命令なんで・・・ふぅ〜)
0002ATL大嫌いNGNG
これじゃコンパイルエラーや・・
memcopy -> memcpy です。
0003デフォルトの名無しさんNGNG
3
0004デフォルトの名無しさん NGNG
色々調べて最後の手段が2chでスレ立てかよ
おめでてーな
0005デフォルトの名無しさんNGNG
ふぅ〜 ヽ(´ー`)ノ
0006デフォルトの名無しさんNGNG
おれはWTL派だが、特別に教えてやる。
_set_se_translatorをつかって自分で例外クラスに変換する。
あとは、その自作例外クラスをキャッチすればいいだろう。

何?catch(...)しか使ってはいけない?
グローバル変数でもつかって例外コンテキスト保存しとけ。
0007デフォルトの名無しさんNGNG
>>1
いっとることがいまいち解らんが・・・
とりあえず、throwはどこにある?
00086NGNG
ついでに、MSDNから探すのに3分とかからなかった事を付け加えておく。
次からは糞スレ建てるんじゃねーぞ。
0009デフォルトの名無しさんNGNG
せめて「例外の使い方」みたいなスレ名にしようよ。


というわけで、例外について語るスレになりました。
0010デフォルトの名無しさんNGNG
例外処理は有用なのか?
0011デフォルトの名無しさんNGNG
RTTI有効にして拾った例外をdynamic_castでもして判断。
とりあえずは動くぞ
0012デフォルトの名無しさんNGNG
エラーコードで返す場合と例外で返す場合の使い分けってどうやってますか?
0013デフォルトの名無しさんNGNG
「やっぱ例外でしょう」っていう時は例外、「エラーコードでいいや」っていうときはエラーコード。
0014デフォルトの名無しさんNGNG
ちとでも継続する可能性があるならエラーコード
もう絶対強制終了なら例外
0015デフォルトの名無しさんNGNG
>>12
私は

 エラーを処理するのが、コールスタックですぐ上にあるヤツならエラーコード、遥か彼方にいるなら例外。
 エラーが発生するのが前提ならエラーコード、エラーが発生したら致命的な(回復処理をしないと、まとも
 に実行を続けられない)場合には例外。

ってな感じだが。

エラーコードだと伝えられる情報がたかだか int 程度だけど、例外を投げる場合にはオブジェクトに必要なだ
け詰め込める上、階層化できるので、ライブラリの奥底で発生した問題をライブラリを利用する側に伝える場
合には例外を使うことが多い。
0016デフォルトの名無しさんNGNG
参考になります。
確かに自分も失敗前提で継続したいときはエラーコード使ってました。
ライブラリみたいな用途には例外がいいのですか。

ふむふむ。
0017デフォルトの名無しさんNGNG
例外のよいサンプルってないかなあ。
こいうときこそ例外を使う!みたいなの。
0018デフォルトの名無しさんNGNG
例外はエラー通知じゃない用途で使うのはアリか?
っていうのも気になる。
0019デフォルトの名無しさんNGNG
C++のコンストラクタで処理ごりごり書いててると、
失敗は例外で出すしかないとおもうけどな。

>18
大抵、広域goto状態になるのでは、と思ったり。
0020デフォルトの名無しさんNGNG
>例外のよいサンプルってないかなあ。
>こいうときこそ例外を使う!みたいなの。

I/Oのエラー処理こそ、まさに例外のためにあると思う。
デバイス上での入出力ストリーム演算子(<<,>>)なんて、
例外処理があって初めて使えるものだし。
0021ななしぃNGNG
>大抵、広域goto状態になるのでは、と思ったり。
MFC見てると、昔はgotoつかってた部分が、例外に置き換えられてたり
するのでありなのでは?
0022デフォルトの名無しさんNGNG
あんましMFCを参考にするのが良いこととは思えんがね…
0023デフォルトの名無しさんNGNG
スレ違いの気も刷るが、Pythonはイテレーションのおしまいを例外で通知するらしい。
そういう使い方もありなのかな、と。
あ、C++はアンワインドプロテクトが無い(かわりにディストラクタが使えなくもない)から、使い道は狭くなるかもだけど。
■ このスレッドは過去ログ倉庫に格納されています