C 功能结构:“;如果出现错误,请提前返回“;或;如果出现错误,则分配,否则,分配,返回分配值“;?
在嵌入式系统中,给定以下功能结构:C 功能结构:“;如果出现错误,请提前返回“;或;如果出现错误,则分配,否则,分配,返回分配值“;?,c,if-statement,return,C,If Statement,Return,在嵌入式系统中,给定以下功能结构: 返回变量的条件赋值: int foo(int x) { int status; if (is_valid(x)) { /* long computation with x */ status = /* some result */; } else status = STATUS_ERROR; return status; } 提早返回: int foo(in
int foo(int x)
{
int status;
if (is_valid(x))
{
/* long computation with x */
status = /* some result */;
}
else
status = STATUS_ERROR;
return status;
}
int foo(int x)
{
if (!is_valid(x))
return STATUS_ERROR;
/* long computation with x */
return /* some result */;
}
- 对于
,它不需要额外和不必要的定义和分配李>状态
- 它清楚地向读者说明,在出现错误的情况下,除了以语言允许的最清晰的方式返回
之外,不做任何事情李>STATUS\u error
- 它允许正常情况下的代码更平坦,因为它不必缩进
-if
else
- 具有单返回点,允许更容易地放置断点李>
- 通过
状态检查即将返回的值(尤其是在该单次返回时)
请注意,与中不同的是,如果出现无效的
x
错误代码,则在返回错误代码之前不会执行任何操作。如果您询问是否应该使用其中一个,这将是一个基于意见的问题,应该关闭
但这个问题似乎在问,是否有任何事实让你在两者之间做出决定,或者这只是一个品味的问题,所以对我来说,这似乎是一个有效的问题
答案很简单,两者之间没有客观区别;这很简单,你觉得哪一个更合适(或者如果你必须遵循一种编码风格)。相关:Linux内核编码风格更喜欢第二个示例。但这是一个偏好的问题,比调试与否更重要。通常最好使用第二种方法,即测试某项内容并报告错误,然后可能测试其他内容并报告错误,最后执行主操作并报告成功。当只有一个测试时,最好还是把较小的代码块(错误报告)放在第一位,因为更容易识别程序块。在第一种情况下,您在底部隐藏有关错误情况的信息,距离触发条件的测试数英里。早期回报通常是有益的。