c-lang:エラー処理
エラー処理
「その関数呼び出しは、まず失敗することはないし、今すぐに戻り値をチェックするのも面倒だ。もちろん、後でこの部分に戻って修正するにしても、とりあえずは、他のことに力を注ぎたいな。」
しかし、こうやって手間を省いても、結局は常に自分に振りかかってくるのだ、という厳しい教訓が得られる。
あなたや、ユーザを悩ませる、非常に説明の困難なシステムクラッシュや、見つけ難いバグの裏には、不適切なエラーチェックや、エラーチェックの見落としがあることが多い。
エラー処理について検討することは、歯医者の予約があるようなもので、きれいごとではなく、予測不能かつ不快な話題で、できれば避けたいものの 1 つであろう。
ただし、強靭なコードを書くためには、エラー処理は避けて通ることのできないものでもある。 よくあるエラーチェック省略の言い訳
「これは単なる、本に載せるためのサンプルコードだ。読者が実際のコードを書くときには、当然適切なエラーチェックを入れるだろう!」
エラー処理の主な方法
エラーが発生したことを通知し、プログラムを終了する。
エラーが発生したことを通知し、エラー発生前から再処理する。
エラーを無視する。
エラー処理の小技
void関数を作らない
1処理1結果判定。エラー時はエラーログを出力してその場でリターン。
戻り値体系を整える(正常=0、異常=-1、エラー詳細はerrnoに設定等)
ログファイルにログを記録する。
ログファイルはサイクリックファイルにする。
エラーログ以外(入出力ログ、デバッグ用ログ)は抑制するモードを用意する。
1ファイル1関数。ログにはミリ秒時刻、エラー内容、ファイル名、行番号、エラー詳細等を出力。
エラーを返さない関数
標準ライブラリの関数の中には、エラーを返さない関数も存在する。
また、あえてエラーを無視して使用するものもある。(printf など)