我应该单独初始化变量而不是声明它们吗?

时间:2011-03-03 00:57:43

标签: c coding-style

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

“仅在初始值是变量语义的一部分时才声明变量。如果初始值是算法的一部分,则使用单独的赋值语句。例如,代替

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

int price, gst;

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

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

4 个答案:

答案 0 :(得分:6)

这实际上只是编程风格的问题。作者可能会说的是,将声明与正常分配分开会使代码更清晰,更容易理解。另一方面,如果初始赋值是变量含义的一部分,则可以将声明和定义结合起来。一个例子可能是一个带有布尔值的int,例如int AnExceptionHasOccurred = FALSE

答案 1 :(得分:2)

只要您在使用之前绝对设置了一个值,那么无论您如何操作都无关紧要。一般来说,最好设置一些合理的默认值或标记值,如果它可能会在以后更改。

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

答案 2 :(得分:2)

我总是喜欢初始化变量。

我的第一个偏好是准确写出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具有“未知”或“随机”值。

答案 3 :(得分:1)

作者可能认为在下面的代码中,语义初始化是基于算法的输入 - 在下面的情况下单位是某些算法的输入。初始化为0或者其他东西并不比仅仅使用已经存在于内存中的垃圾更有意义 - 这两者对于作者认为重要的算法都是无效的。

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