c - 避免/减轻每次函数调用后返回值检查的痛苦的方法?

标签 c error-handling return-value conventions

在不支持异常的语言和/或库中,许多/几乎所有函数都会返回一个值,指示其操作成功或失败 - 最著名的例子可能是 UN*X 系统调用,例如 open( )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 并在异常中抛出错误,但我不能那样做。下一个最好的事情是什么?我知道 there's no real solution to this problem ,但我还是想做点什么

一些想法:

  • 尝试接受 assert() 的(但这不适用于生产代码,因为生产代码不能死掉)。
  • 用宏或返回值检查函数包装函数调用,例如ensure_success(my_function(args)ensure_success(my_other_function(args),my_error_handler,error_handler_args)

在这件事上我可能更喜欢其他做法吗?

编辑:

  • 是的,我正在编写 C 代码。我尊重你的意见,即我应该尽量避免完全用 C 编写,但这确实没有建设性。这不是语言 war 问题,请不要成为一个问题。
  • 我不是征求关于什么是最好的事情的意见,我只是想要更多的可能性。 (我会选择一个我喜欢的,其他人可能会选择其他的。)

最佳答案

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

不要打它。本着 C 的精神尽可能多地解决这个问题,你对事物的看法会稍微扩展。

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

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

关于c - 避免/减轻每次函数调用后返回值检查的痛苦的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17342279/

相关文章:

iphone - 在 Objective-C 中,如何处理 [[myView alloc] init] 返回 nil?

c++ - 异常后返回的对象?

python - 如何在 python 编写的 while 语句中获取返回值?

c++ - 为 main() 返回不同的 int 值

C:从文件中读取数字和字符串

c - 使用 execle 和 putenv 后跟 execl 有什么区别?

C - 功能没有执行?

vbscript - VB GoTo编译失败

c++ - fftshift/ifftshift C/C++ 源代码

php - 如何使用异常处理或错误处理停止页面以显示特定警告(请参阅详细信息)?