【发布时间】:2023-03-27 13:35:01
【问题描述】:
任何通用函数的错误处理代码都遵循此模板 我的两个问题--
- 默认的 FAILURE 值应该是多少? (1 跟上主要或 0,或 -1 以避免所有的混乱)
- 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?