例外をサポートしていない言語および/またはライブラリでは、多くの/ほとんどすべての関数が、操作の成功または失敗を示す値を返します。最もよく知られている例は、おそらく や 、またはいくつかの libc 関数などの UN*X システム コールopen()
ですchdir()
。
とにかく、私が C コードを書くと、たいてい次のようになります。
int retval;
...
retval = my_function(arg1, arg2);
if (retval != SUCCESS_VALUE) { do_something(); }
retval = my_other_function(arg1, arg2);
if (retval != SUCCESS_VALUE) { do_something_else(); }
今、私が望むのは、retvalをどこにも保存せず、例外でエラーをスローすることですが、それはできません。次善の策は何ですか?この問題に真の解決策がないことはわかっていますが、それでも何とかしたいと思っています。
いくつかのアイデア:
- 'sと一緒に暮らすようにしてください
assert()
(ただし、それは単に死ぬわけにはいかない製品コード用ではありません)。 - 関数呼び出しをマクロまたは戻り値チェック関数でラップします (例:
ensure_success(my_function(args)
or )ensure_success(my_other_function(args),my_error_handler,error_handler_args)
。
この件に関して私が好むかもしれない他の慣行はありますか?
編集:
- はい、C コードを書いています。私は C で書くことを完全に避けるべきだというあなたの意見を尊重しますが、それは実際には建設的ではありません。これは言語戦争の質問ではありません。
- 何をするのが最善かについて意見を求めているわけではありません。追加の可能性が欲しいだけです。(私は好きなものを選びますが、他の人は他のものを選ぶかもしれません。)