love! LOVEHINA - love2hina.net


カテゴリー

アーカイブ
2010/06/13 プログラムスキルレベルアップ ぱ~と2

作成者: カテゴリー: 未分類

昨日から続いちゃいました。

ポイント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へ通知されます。