功能结构:“如果出错,提前返回”或“如果出错,分配,否则,分配,返回分配的值”?

时间:2019-05-12 23:50:00

标签: c if-statement return

在嵌入式系统中,具有以下功能结构:

  1. 有条件分配返回变量:

    int foo(int x)
    {
        int status;
    
        if (is_valid(x))
        {
            /* long computation with x */
            status = /* some result */;
        }
        else
            status = STATUS_ERROR;
    
        return status;
    }
    
  2. 提前返回:

    int foo(int x)
    {
        if (!is_valid(x))
            return STATUS_ERROR;
    
        /* long computation with x */
        return /* some result */;
    }
    

我认为,后者应优先于前者:

  • 对于status,它不需要多余的定义和分配;
  • 它向读者清楚地指出,如果发生错误,除了返回STATUS_ERROR以外,什么也不会做,这是在语言开始时以最清晰的方式允许的;
  • 由于不需要为if-else缩进,因此可以使普通情况的代码更加平坦。

但是,我已经看到前者被用于几个不同的项目中。我相信,这样做的原因可能与开发的调试步骤有关,可以:

  • 具有单个返回点,可以更轻松地放置断点;
  • 通过status检查即将返回的值(尤其是在单次返回时)。

我是否正确地说这是为了调试?还有其他理由比1.更喜欢1.吗? 1.在裸机开发的背景下是否被视为良好实践

请注意,与this question不同,在x无效的情况下,返回错误代码之前不会进行任何工作。

1 个答案:

答案 0 :(得分:0)

如果您问一个人是否应该使用另一个,则这将是一个基于意见的问题,应予以关闭。

但是这个问题似乎是在询问是否有任何事实让您在这两者之间做出决定,这仅仅是一个口味问题,所以对我来说这是一个有效的问题。

答案很短,两者之间没有客观差异;就像您更习惯使用哪一种(或者如果您必须遵循编码风格)一样简单。