2010/06/13
プログラムスキルレベルアップ ぱ~と2
作成者: love2hina
カテゴリー: 未分類
昨日から続いちゃいました。
ポイント2 – 例外の動作を理解せよ
例外を使い出したはいいものの、よく理解せずに使っているケースも多々見受けられます。
void MainProc(void) {
try { funcA(); } catch (clsException e) { // エラー処理 printf("エラー説明: %s", e.getDescription()); } }
void funcA(void) {
try { funcB(); } catch (clsException e) { throw e; // …ぇ? } }
void funcB(void) {
if (globalAnyPointer == NULL) { throw clsException("NULL ポインター例外"); }
// 何か処理… }
こんな、何もせずただ再度例外をスローするだけの無意味な try ~ catch が存在するプロジェクトをいくつみてきたことか…
これも、戻り値でエラーを返す習慣が抜けていないのでしょう。
例外処理の場合、プログラム上で意識しなくても自動的にコールスタックを遡ります。
また、この時通過する関数は引き継ぐ処理を行わなくとも、自動的にエラー情報は引き継がれます。
void MainProc(void) {
try { funcA(); } catch (clsException e) { // エラー処理 printf("エラー説明: %s", e.getDescription()); } }
void funcA(void) {
funcB(); }
void funcB(void) {
if (globalAnyPointer == NULL) { throw clsException("NULL ポインター例外"); }
// 何か処理… }
上の例では、funcAは特に必要がなければ、例外を受け取る必要はありません。
このようにしても、funcBで起きたNULL ポインター例外はちゃんとMainProcへ通知されます。