Cは例外処理機構がない。例外がない言語を使ってはじめてわかるありがたさ。
Cの場合、エラーの扱い方は基本的に関数の戻り値でやります。エラーコードとかNULLとか不正値返したりとか。出力パラメータで同じことやる、ってのもあるかな。
なので、エラー処理の基本は下のような返り値if文チェックでやることになる。
int ret = do_hoge(...);
if (ret == ERR_CODE) {
perror("エラーです");
return 2;
}
これの何が煩わしいって、いわゆる「例外」とフツーの「エラーケース」がごちゃまぜになる点。これでもまぁ不都合はないんだけど、例外とエラー処理は分けて考えたいんだよね。
コード的にはif文がやたらと増えるだけで問題ないんだけど*1、例外と想定範囲内のエラーハンドリングは設計上別物。だから、コード上でもそれを反映させたいんで、例外処理機構は便利だなぁと感じました。
*1:あまり気分はよくないが