首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优先规则== over =

优先规则== over =
EN

Stack Overflow用户
提问于 2010-04-29 10:54:06
回答 10查看 294关注 0票数 2

我只是想知道这样做会不会更好:

代码语言:javascript
复制
if((fd = open(filename, O_RDWR)) == -1)
{
fprintf(stderr, "open [ %s ]\n", strerror(errno));

return 1;
}

或者这个

代码语言:javascript
复制
fd = open(filename, O_RDWR);
if(fd == -1)
{
    fprintf(stderr, "open [ %s ]\n", strerror(errno));

    return 1;
}

非常感谢您的建议,

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-04-29 10:56:05

可恶,分成两半。将所有内容整合到一行中会有什么好处呢?让我们进行比较和对比:

单行:

  • Advantages:
  • Disadvantages:很难读,容易出错。(请考虑您的第一个版本。)

多行:

  • 的优势:易于阅读,error-prone.
  • Disadvantages:

更少

我想已经很清楚了。:)

有时将其放在一行更有意义,例如:while ((c=getchar())!=EOF)

这很好,但这里的情况并非如此。有时候,不拆分它更有意义,但通常情况下,不要这样做。

“它节省了更多的垂直空间”

如果一行代码破坏了你查看函数的能力,你需要1)买一台分辨率高于640x480的显示器,2)编写更小的函数。

真的,我从来没有理解过任何事情的论点,函数应该很容易地适合任何屏幕,无论一行差异。

“多行使其看起来很复杂”

实际上并非如此,把它放在一行上可以说是更难阅读,看起来也更复杂。拆分使得一次处理一位变得更简单,我们不应该假设两行代码会使它变得两倍复杂。

票数 12
EN

Stack Overflow用户

发布于 2010-04-29 11:38:03

有几个人支持第二种观点。我不同意他们的观点。虽然(显然)在第一个版本中===之间最初存在一个小问题,但我认为这是一个小问题。

一个更大的问题是,人们(特别是在匆忙中)跳过错误检查的情况太普遍了--完全忽略了if (whatever == -1),通常是因为他们正在处理的是快速的、一次性的代码,实际上并不需要检查错误。这是一个非常坏的习惯;我几乎可以保证每个阅读本文的人都看到过像这样跳过错误检查的真实代码,即使它真的真的应该有错误检查。

在这样的代码中,尝试打开文件并检查其中的错误应该紧密地绑定在一起。将这两个放在同一个语句中反映了正确的意图。将两者分开是完全错误的--任何时候都不应该因为任何原因而以任何方式分开它们。这应该被编码为单个操作,因为它应该被编码为a操作。它应该始终被认为是一个单一的操作并进行编码。

在我看来,这样做的借口是相当站不住脚的。事实是,任何使用C的人都需要能够阅读结合了赋值和条件测试的代码。举一个明显的例子,像while ((ch=getchar()) != EOF)这样的循环几乎需要编写为组合赋值和测试--尝试单独测试EOF通常会导致代码不能正常工作,如果您真的让它正常工作,代码就会复杂得多。

同样,-==的问题也是如此。由于我一开始就没有看到缺陷,我不确定将两者分开会在多大程度上避免问题,但我直接猜测这可能几乎没有任何区别。当一个应该是条件的东西只包含一个赋值的时候,编译器会警告你,这已经存在很多年了(例如,gcc)。在大多数情况下,症状几乎一目了然--简而言之,你在这篇文章的一部分中犯了一个特定的打字错误,而另一部分却没有,这并不能证明(或诚实地说,甚至表明)这两个部分的相对难度有多大。

基于这种证据,我显然认为"not“比"immediately”更难输入,因为我只是输入了"immediately“而没有任何问题,但在前一句话中正确出现之前,我必须更正"not”(两次,不少于)。我非常确定,如果我们以我输入错误的频率来衡量," the“是英语中最难的一个单词。

票数 6
EN

Stack Overflow用户

发布于 2010-04-29 10:56:46

也许是一些圆括号让排序变得明显的东西?

代码语言:javascript
复制
if((fd = open(filename, O_RDWR)) == -1)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2734522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档