为什么C/C++编码标准说我们不应该在函数中有多重返回?

Why do C/C++ -Coding standard says that we should not have multiple return in function?

本问题已经有最佳答案,请猛点这里访问。

在我的组织,我们的后续Misra编码指南。这是我们所说的编码指引,不在有多回报的功能。你有任何的主意吧?为什么是这样的吗?


我不同意函数不能有多个返回。有时,提前返回可以使代码更容易阅读和维护。

1
2
3
4
5
6
7
function DoStuff
{
  if ( simpleCondition ) return result;

  DoComplcicatedProcess
  return complicatedOperatotionResult;
}

是的,可以将其包装为一个条件,但在这种情况下,它很容易阅读,而且可能更高效。


首先,单一的回报有点容易维护和理解。第二,多次返回很可能意味着我们直接返回的是一个值,而不是数量。它使函数更容易理解。我给你举个简单的例子。

多次返回示例

1
2
3
4
5
6
7
CalculateInterest(int cost)
{
    if (cost < 100)
       return cost * .2;
    else
       return cost * .3;
}

单回路同一功能

1
2
3
4
5
6
7
8
9
10
11
CalculateInterest(int cost)
{
    float interest;

    if (cost < 100)
        interest = cost * .2;
    else
        interest = cost * .3;

    return interest;
}


带有多个返回语句的函数比较混乱,如果方法太大,就不容易理解。您可能会不小心跳过一些应该执行的行。

如果您正在编写一个不需要以后维护的小程序,可以忽略这个规则。但是,对于将来可能维护的较长程序,当人们在一段时间后修复错误时,很可能忽略一些返回到调用函数的代码块,并将一些代码放在该代码块下面,假定它将运行。一个这样的例子可能是清理代码。

可以很容易地说,程序员应该更加小心,但遵循一个返回策略将使避免此类错误变得更容易。