gpt4 book ai didi

c - 函数结构: "if error, early return" or "if error, assign, else, assign, return assigned value"?

转载 作者:行者123 更新时间:2023-11-30 16:17:57 27 4
gpt4 key购买 nike

在嵌入式系统的背景下,给出以下函数结构:

  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. 而不是 2.吗? 1. 在裸机开发的背景下是否被认为是良好实践

请注意,与 this question 不同,如果 x 无效,则在返回错误代码之前不执行任何操作.

最佳答案

如果您询问是否应该使用其中之一,这将是一个基于意见的问题,应该关闭。

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

答案很简短,两者没有客观区别;这很简单,只要您觉得哪种更舒服(或者您是否必须遵循某种编码风格)。

关于c - 函数结构: "if error, early return" or "if error, assign, else, assign, return assigned value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104381/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com