【问题标题】:Is it a good practice to write multiple concise statements in one line? [closed]在一行中编写多个简洁语句是一种好习惯吗? [关闭]
【发布时间】:2014-02-05 15:01:14
【问题描述】:

我倾向于写这样的代码:

if (*t) while (*++t);

内容为:如果字符串 t 不以 /0 开头,则移到末尾。

注意while循环没有主体,所以分号终止它。

我想知道这样做是否是一种好习惯?为什么?为什么不?

C 是当今使用的最古老的流行语言之一。我相信很有可能找到一份或多份已确立的风格指南。

我知道 Google 为他们的 C++ 开源项目提供了一个 - http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

谁能指出我为什么或为什么不以某种方式编写代码的资源?

【问题讨论】:

  • 我通常喜欢每行只写一个语句。但如果我的“Enter”键坏了……那就是另一回事了。
  • /0 ?? white loop??
  • @GrijeshChauhan 你的意思是我的陈述和你的陈述是平等的吗?他们不是。如果我有一个字符串 "\0" - 您的语句将在字符串末尾后 1 个位置结束。而我的将保持在位置 0。(请参阅您已编辑该语句等于的原始评论:while (*++t);)
  • @kev 是的,Kev,我删除了那条评论,因为那是错误的。
  • 编写可读的代码是个好习惯。

标签: c coding-style


【解决方案1】:

通常编写单独的代码行是一个好习惯。就像在大段代码的情况下,如果我们在单独的行中编写代码,调试会更清晰。

【讨论】:

  • +1 用于提及调试。只需尝试在同一物理行上的两个语句之间放置一个断点。
【解决方案2】:

这取决于!谁将必须阅读和维护此代码?存在编码标准有两个主要原因:

  1. 使代码更具可读性和可维护性。当有多个开发人员时,它使代码更加一致(更具可读性)。

  2. 阻止常见错误。例如,一个标准可能要求在条件句中首先放置文字,以阻止赋值作为比较的错误。

这些目标如何应用于您的特定代码?你容易犯错吗?如果这是 Linux 内核代码,与入门级程序员维护的 Web 应用相比,拥有这样的代码要容易得多。

它的内容是:如果字符串 t 不以 /0 开头,则移动到末尾。

然后考虑在上面发表评论。

【讨论】:

  • 我同意。通常情况下,您会想出一个公式,或者就像在这种情况下一样,一个看起来非常通用的循环进行通用计算(增量,检查零等),这非常简洁(这是一件好事),但它看起来非常不具描述性。你没有办法让它看起来不错,但在它上面放一个简短的评论说明它的作用。
【解决方案3】:

令人惊讶的是,随着时间的推移,维护代码通常比一开始就编写代码的成本更高。如果代码更具可读性,维护成本就会降到最低。

您的代码有三种受众。在格式化时,您应该考虑一下他们的时间是多么宝贵:

  1. 程序员同事,包括您的同事和代码审查员。你 希望这些人对你有很高的声誉。您应该编写他们易于理解的代码。
  2. 你未来的自己。复杂的代码可能很明显 写了,过两周再拿,你就不会了 记住它的意思。你在 10 中写的“简洁”声明 总有一天你会花 20 分钟来破译。
  3. 优化编译器,无论如何都会产生高效的代码 你的台词是否简洁。编译器不在乎 - 尽量为其他两个节省时间。 (提示对这个项目的愤怒评论。我赞成编写高效的代码,但是像我们这里描述的那样简洁的样式不会影响编译器的效率。)

【讨论】:

  • +1 用于提及编译器在制作良好机器代码方面的技能。它的工作是将人类可读的代码变成比特,而且它非常擅长,所以要保持代码“人类可读”。
【解决方案4】:

不好的做法,因为不容易解析。我愿意

while (*t) ++t;

让编译器做一点点优化。

它的原文翻译读起来比你的还要短

前进t,直到它指向0

【讨论】:

    【解决方案5】:

    虽然您可以用 C 语言在一行中编写一些非常聪明的代码,但就可读性和易于维护而言,这通常不是一个好的做法。对于将来维护您的代码的人来说,您容易理解的内容可能看起来完全陌生。

    您需要在简洁性和可读性之间取得平衡。为此,通常最好将代码分开,这样每一行都做一件事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2020-08-25
      • 2010-12-24
      • 1970-01-01
      • 2014-11-05
      • 2015-02-18
      • 2016-03-20
      相关资源
      最近更新 更多