返回用C编写的嵌入式系统中的代码值

时间:2011-09-20 10:17:59

标签: c coding-style

我看到返回代码值的大部分地方都是这样完成的,

成功状态返回,#define SUCCESS 0和其他所有其他错误情况的无数字。

我的问题是,为什么我们为SUCCESS案件选择零?是否有任何特定的编程最佳实践问题?

/ R

4 个答案:

答案 0 :(得分:4)

为了成功而返回0以及其他一些错误代码,这是一个古老的C习惯,所以你可以说:

int error = do_stuff();
if (error) {
    handle_error(error);
}

但是,谓词通常以相反的方式工作,返回1表示“成功”(或true来自<stdbool.h>)。

答案 1 :(得分:3)

零通常意味着成功,因为零是唯一的计算结果为false的整数值。所有其他整数值的计算结果为true,它们适用于各种错误代码。

它可能看起来有点奇怪和逻辑上倒置,但因为成功只是成功而错误可能不同,所以经常选择上述惯例。

事实上,如果函数的返回值不仅用作成功/失败指示符,而且还用作错误代码,这是最合理的约定。如果存储了错误代码,例如在另一个输出参数中,那么返回1表示成功,0表示失败更有意义。

想象一下0成功的条件是什么:

if (errcode = func()) {
  /* error handling */
}

与更麻烦的相比:

if ((errcode = func()) != 1) {
  /* error handling */
}

答案 2 :(得分:3)

您必须区分不同的错误,可能会有MaxInt - 1个不同的错误。

如果0出错并且1成功,您如何区分所有错误?

答案 3 :(得分:2)

这是一个操作系统惯例。

http://en.wikipedia.org/wiki/Exit_status