学校の課題でも、真面目にエラーチェックなんてやっていたら、肝心のロジックが埋もれてしまいそうな具合です。といっても、それでもmallocやfopenがNULLを返したら即座にエラーメッセージかつexit(1)というお気楽路線ですが。

そのお気楽路線のために、こんな感じのマクロを作っています。

#define die(msg) (fputs((msg), stderr), fputc('\n', stderr), exit(1))

これを作ったとき、すごくこう使いたいと思いました(そのためには上の定義だと若干問題がありますが、もちろんそれを直すという仮定の下です)。

void *p = malloc(n);
p != 0 || die("malloc failed!");

Perlのdieのノリです。p == 0のときだけ、ORの右側、dieを評価しに行くという具合です。さすがにトリッキーかなと思って、結局ifと組み合わせて使うようにしましたが。

if (p != 0)
    die("malloc failed!");

この手のエラー処理をするものは、結局ことごとくラップしているので、dieを使う場所は限られてしまい、ifでもいいやと思っている状態です。そこかしこでdieの出番が出るようなら、やっぱり簡潔に書ける||(論理OR)を使おうかなと思うようになる気がします。そもそも、きちんとした例外処理機構があればそれに任せてしまうのですが……。

スポンサード リンク

この記事のカテゴリ

  • ⇒ もう終わりだ、まだ終わらない