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