【发布时间】:2017-07-23 08:29:56
【问题描述】:
我经常用 C 语言构建函数来检查一些参数并返回错误代码。
当我发现错误时停止值检查的最佳方法是什么?
第一个例子:
ErrorCode_e myCheckFunction( some params )
{
ErrorCode_e error = CHECK_FAILED;
if( foo == bar )
{
if( foo_1 == bar_1 )
{
if( foo_2 == bar_2 )
{
error = CHECK_SUCCESS;
}
}
}
return error;
}
第二个例子:
ErrorCode_e myCheckFunction( some params )
{
if( foo != bar )
{
return CHECK_FAILED;
}
if( foo_1 != bar_1 )
{
return CHECK_FAILED;
}
if( foo_2 != bar_2 )
{
return CHECK_SUCCESS;
}
}
我更喜欢第一种方法,因为我读到 MISRA 规则避免使用多个返回语句。
哪种方法最好?
【问题讨论】:
-
如果你更喜欢第一个,那是最好的(对你来说):)
-
这实际上不是一个基于意见的问题。 OP 更喜欢一个版本,因为 MISRA-C 告诉他这样做,没有说明理由。这里真正的问题是为什么 MISRA-C 会做出这样的声明。过去,我已经深入了解了为什么这个规则甚至存在,请在下面回答。
-
@Toby 不是重复的,因为它没有解决 MISRA 方面的问题。
-
@Lundin 没有明确提到 MISRA,但在问题中我表达了对单个退出点的偏好(IIRC 无论如何都是因为 MISRA 要求)和答案提供的例子都说明了这一点。 WRT 实际上回答了所提出的问题(而不是对 MISRA 发表意见)我认为那里的答案也回答了这个问题。