【问题标题】:Should I initialize variables separately from declaring them?我应该单独初始化变量而不是声明它们吗?
【发布时间】:2011-03-03 00:57:42
【问题描述】:

我正在学习 C 语言。书中说:

"只有当初始值是变量语义的一部分时才初始化变量。如果初始值是算法的一部分,请使用单独的赋值语句。例如,而不是

int price = units * UNIT_PRICE;
int gst = price * GST;

int price, gst;

 price = units * UNIT_PRICE;
 gst = price * GST;

我不明白我们为什么要这样做?背后的原因是什么?

【问题讨论】:

  • 哪本书?克尼根和里奇?
  • 这不是 K+R,现在阅读它基本上与此相反(您可以互换)。
  • 这里是网址:cs.senecac.on.ca/~chris.szalwinski/archives/btp100.033/content/…,在“指南”部分。
  • 您的书的作者似乎无缘无故地试图将一种非标准的做法强加给您。如有疑问,请关注 K&R。 :-)

标签: c coding-style


【解决方案1】:

这实际上只是编程风格的问题。作者可能想说的是,将声明与普通赋值分开会使代码更清晰,更容易一目了然。另一方面,如果初始赋值是变量含义的一部分,那么结合声明和定义是可以的。这方面的一个示例可能是带有布尔值的 int,例如 int AnExceptionHasOccurred = FALSE

【讨论】:

    【解决方案2】:

    只要你在使用前绝对设置了一个值,你怎么做都没有关系。不过,最初设置一些合理的默认值或标记值通常是一种不错的风格,如果以后可能会更改的话。

    这是因为如果在设置之前被引用,您无法保证未初始化的变量可能对值有什么影响,这是一个样式错误。

    【讨论】:

      【解决方案3】:

      我总是喜欢初始化变量。

      我的第一个偏好是完全按照 OP 的建议写,即

      int price = units * UNIT_PRICE;
      int gst = price * GST;
      

      如果本地编程标准不允许这样做,我会这样做

      int price = 0;
      int gst = 0;
      ...
      price = units * UNIT_PRICE;
      gst = price * GST;
      

      关键是始终将变量保持在“已知”状态。

      我不喜欢写作

      int price, gst;
      

      因为在上述语句的末尾,变量pricegst 具有“未知”或“随机”值。

      【讨论】:

        【解决方案4】:

        作者可能争辩说,在下面的代码中,语义上的初始化是基于算法的输入——在​​下面的例子中,units 是某个算法的输入。初始化为 0 之类的东西并不比让内存中已经存在的垃圾被使用更有意义——两者对于作者所争论的算法都是无效的。

         price = units * UNIT_PRICE;
         gst = price * GST;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-28
          • 2015-09-17
          • 2015-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          相关资源
          最近更新 更多