【问题标题】:What should be the initial value for return status in C?C 中返回状态的初始值应该是多少?
【发布时间】:2023-03-27 13:35:01
【问题描述】:

任何通用函数的错误处理代码都遵循此模板 我的两个问题--

  1. 默认的 FAILURE 值应该是多少? (1 跟上主要或 0,或 -1 以避免所有的混乱)
  2. status 的初始值应该是多少? (失败或通过)

代码:

#define FAILURE 0  //or shall it be 1 for success and 0 for failure
#define SUCCESS 1

int DoSomething() {
    int status = FAILURE;  //or shall we assign success by default?

    if (error1)
        return FAIL_A
    if (error2)
        return FAIL_B

    return SUCCESS;
}

int GetItDone() {
   status = FAIL;

   Status = DoSomething();
   if (PASS != status) //likewise many calls can happen later
     goto END;

END:
  return status;
    }

状态通过函数调用冒泡。

【问题讨论】:

  • 不要相信你的功能,从失败开始——我就是这么做的
  • 你不能从失败开始,例如,如果你必须循环并寻找失败的条件。上面的代码没有意义,因为status 从未实际使用过。
  • 有十几种不同的方法来处理返回的错误值。您也许可以提供更多上下文...例如,您是否还返回结果值,还是仅返回成功/错误代码?另外,尝试使代码示例有意义...现在status 从未使用过,因此代码 sn-p 只是令人困惑。
  • 由于您在返回语句中插入值,变量status 未使用,应删除,而不是初始化。或者您需要重写您的伪代码以将status 设置为不同的值,然后在末尾设置return status;
  • 可能有趣的相关问题:Should I set errno?

标签: c macros return status


【解决方案1】:

约定为 0 表示成功,负值表示各种失败,正值表示成功。

其中,最常见的是返回 0 表示成功:否则会很奇怪。

对于您的代码,最初将状态设置为失败代码并酌情将其更改为成功将提供更高的程序稳定性。

【讨论】:

  • 谢谢。将其设置为 FAIL 会增加稳定性,但问题是我们需要在最后明确地将其分配给 SUCCESS。在一般实践中更普遍的是什么?我也将它用于 C++。 (由于某种原因不能使用异常)
  • 标准库约定是 0 表示成功,-1 表示错误,errno 表示错误代码。我不会说有一个通用的 C 约定非负表示成功(更不用说,整个errno 机制在某些方面有点可怕),即使它很常见(因为通常负返回值会否则没有意义,所以用它来返回错误很方便)。
【解决方案2】:

成功返回 0 让您在失败时返回不同的值

#define SUCCESS 0
#define FAILURE_CASE_1 -1
#define FAILURE_CASE_2 -2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2023-01-03
    • 2019-05-28
    • 1970-01-01
    相关资源
    最近更新 更多