kagamihogeの日記

kagamihogeの日記です。

C言語の例外とエラー処理

Cは例外処理機構がない。例外がない言語を使ってはじめてわかるありがたさ。

Cの場合、エラーの扱い方は基本的に関数の戻り値でやります。エラーコードとかNULLとか不正値返したりとか。出力パラメータで同じことやる、ってのもあるかな。

なので、エラー処理の基本は下のような返り値if文チェックでやることになる。

int ret = do_hoge(...);
if (ret == ERR_CODE) {
perror("エラーです");
return 2;
}

これの何が煩わしいって、いわゆる「例外」とフツーの「エラーケース」がごちゃまぜになる点。これでもまぁ不都合はないんだけど、例外とエラー処理は分けて考えたいんだよね。

コード的にはif文がやたらと増えるだけで問題ないんだけど*1、例外と想定範囲内のエラーハンドリングは設計上別物。だから、コード上でもそれを反映させたいんで、例外処理機構は便利だなぁと感じました。

*1:あまり気分はよくないが