ein*_*ica 9 c error-handling conventions return-value
在不支持异常的语言和/或库中,许多/几乎所有函数都返回一个值,表示其操作成功或失败 - 最着名的例子可能是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(); }
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是不要将retval保存在任何地方并且在异常中抛出错误,但我不能拥有它.什么是下一个最好的东西?我知道这个问题没有真正的解决办法,但我还是想做点什么.
一些想法:
assert()(但那不是生产代码,不能只是死).ensure_success(my_function(args)或ensure_success(my_other_function(args),my_error_handler,error_handler_args).我可能更喜欢这个问题吗?
编辑:
尝试以一种科学的好奇心来解决这个问题。许多人声称 C 的错误处理方法使程序员更加了解错误情况,更加关注错误以及应在何处/如何处理错误。只是认为这是一种意识练习(如果有点乏味),就像冥想:)
不要对抗它。尽可能地以 C 语言的精神解决这个问题,你的视野会稍微扩大一些。
查看这篇有关 C 错误处理咒语的文章:http://tratt.net/laurie/tech_articles/articles/how_can_c_programs_be_so_reliable
对于您的一般问题的一个一般答案是:尝试使函数尽可能小,以便您可以在出现错误时直接从它们返回。这种方法适用于所有语言。剩下的就是构建代码的练习。