在每次调用函数后,如何避免/减轻返回值检查的痛苦?

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中写作,但那真的不具有建设性.这不是一个语言战争的问题,请不要成为一个问题.
  • 我不是在问什么是最好的事情,我只想要更多的可能性.(我会选择一个我喜欢的,其他人可能会选择别的东西.)

ctn*_*ctn 3

尝试以一种科学的好奇心来解决这个问题。许多人声称 C 的错误处理方法使程序员更加了解错误情况,更加关注错误以及应在何处/如何处理错误。只是认为这是一种意识练习(如果有点乏味),就像冥想:)

不要对抗它。尽可能地以 C 语言的精神解决这个问题,你的视野会稍微扩大一些。

查看这篇有关 C 错误处理咒语的文章:http://tratt.net/laurie/tech_articles/articles/how_can_c_programs_be_so_reliable

对于您的一般问题的一个一般答案是:尝试使函数尽可能小,以便您可以在出现错误时直接从它们返回。这种方法适用于所有语言。剩下的就是构建代码的练习。

  • 让我引用您发布的文章:*(...)一个人必须自己处理所有可能的错误路径。这是极其痛苦的(...)* (3认同)
  • @BartekBanachewicz 没有痛苦,就没有收获:http://www.psychologytoday.com/blog/memory-medic/201106/learning-no-pain-no-gain (3认同)