5

考虑以下人为设计的示例:

void HandleThat() { ... }

void HandleThis()
{
    if (That) return HandleThat();
    ...
}

这段代码工作得很好,我很确定它是规范有效的,但我(也许我自己)认为这种不寻常的风格,因为调用似乎返回了函数的结果,尽管这两个函数都是原型的无效。

通常,我希望看到:

if (That) {HandleThat(); return;}

我觉得,这对正在发生的事情没有任何歧义。

SO社区,我可以就返回无效的编码风格是否令人困惑或有问题获得您的意见?它有成语的感觉;我应该使用它还是避免它?

一般来说,我会争取清晰并使用第二种风格。另一方面,第一种形式的简洁性在某种程度上吸引了我。

4

5 回答 5

13

我同意你的观点,第一种风格令人困惑,因为暗示某种价值正在被返回。事实上,正因为如此,我不得不读了几遍。

当从一个原型为 void 的函数返回时,它应该只是返回;

于 2009-08-06T19:31:46.247 回答
11

这可能有点太聪明了。如果该行最终距离函数顶部超过几行,则会令人困惑。这也意味着查看代码的程序员需要关联

return HandleThat();

使用 void 返回类型,并在他们真正理解代码之前弄清楚它的聪明之处。当你在 if/else 分支中做不止一件事时,你应该真正使用大括号并将步骤放在不同的行上。占用更多空间但更容易理解:

if (That) {
    HandleThat();
    return;
}
于 2009-08-06T19:33:24.870 回答
4

C 语言规则规定,如果声明为返回 void 的函数尝试返回表达式,则不会计算该表达式。

http://c0x.coding-guidelines.com/6.8.6.4.html

于 2009-08-06T19:36:00.450 回答
3

以前从未见过。

它的优点是看起来像非 void 返回类型的常见习语,所以它很容易阅读......

除非有人可以证明它无效,否则我不会更改它。

于 2009-08-06T19:33:47.037 回答
2

我相信第一个版本主要是为了简化模板编程。如果 HandleThat 返回的类型 T 可能是也可能不是 void,那么使用第一个版本很方便。

但在“正常”情况下,第二个版本更清晰,我更喜欢那个。

于 2009-08-06T21:10:12.063 回答