在不支持异常的语言和/或库中,许多/几乎所有函数都返回一个指示其操作成功或失败的值——最著名的例子可能是 UN*X 系统调用,例如open()
or chdir()
,或一些 libc 函数。
无论如何,当我编写 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 并且在异常中抛出错误,但我不能这样做。下一个最好的事情是什么?我知道这个问题没有真正的解决方案,但我还是想做点什么。
一些想法:
- 尝试与
assert()
's 一起生活(但这不适用于无法承受死亡的生产代码)。 - 使用宏或返回值检查函数包装函数调用,例如
ensure_success(my_function(args)
或ensure_success(my_other_function(args),my_error_handler,error_handler_args)
.
在这件事上我可能更喜欢其他任何做法吗?
编辑:
- 是的,我正在编写 C 代码。我尊重您的意见,即我应该尽量避免完全用 C 语言编写,但这确实没有建设性。这不是一个语言战争问题,请不要把它变成一个问题。
- 我不是在征求关于什么是最好的事情的意见,我只是想要更多的可能性。(我会选择我喜欢的,其他人可能会选择其他的。)