我正在研究嵌入式程序,在某些情况下如果没有条件,我想尽快从函数返回.如果我有以下代码,我正在进行嵌入式编程:
foo() {
if (a < b) {
return 0; // bail, since condition is met
} else {
// lots of calculations in this block
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有多个return语句是不是很糟糕?这是不好的做法吗?有更好的方法吗?MISRA是否对此有所说明?
注意:这个问题特别针对嵌入式系统,与MISRA有关,而不仅仅是C/C++
谢谢...
oua*_*uah 15
MISRA需要一份退货声明:
(MISRA,规则14.7:要求)"功能在功能结束时应有单点退出"
现在,我个人认为这不是一个好规则.最小化返回语句的数量,但在增强代码的可读性时使用return语句.
例如,guard子句可以使您的代码更清晰,更易读.
我建议你阅读这篇关于duffing的文章(从上到下编写代码):
我会这样写,因为这else是多余的:
if (a < b) {
return 0; // bail, since condition is met
}
// lots of calculations in this block
return 1;
Run Code Online (Sandbox Code Playgroud)
我不认为有经验法则,但如果函数真的很长并且有多个返回点,则可能很难维护和理解。
然而,例如,在递归函数中,将“基本情况”作为返回语句放在函数的开头非常方便。
例如,考虑阶乘:
int fact(int x) {
// base cases
if (x == 0 || x == 1)
return 1;
// recursive call
return x * fact(x-1);
}
Run Code Online (Sandbox Code Playgroud)
你也可以这样写:
int fact(int x) {
int ret = 0;
if (x == 0 || x == 1)
ret = 1;
else
ret = x * fact(x-1);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我只是更喜欢第一种方式,但这并不意味着任何一种方式都比另一种更好。
这实际上取决于您必须遵循的标准和个人喜好。
| 归档时间: |
|
| 查看次数: |
8328 次 |
| 最近记录: |