我正在学习C语言。在书中,它说:
“仅在初始值是变量语义的一部分时才声明变量。如果初始值是算法的一部分,则使用单独的赋值语句。例如,代替
int price = units * UNIT_PRICE;
int gst = price * GST;
写
int price, gst;
price = units * UNIT_PRICE;
gst = price * GST;
我不明白为什么要这样做?它背后的原因是什么?
答案 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;
因为在上述语句的末尾,变量price
和gst
具有“未知”或“随机”值。
答案 3 :(得分:1)
作者可能认为在下面的代码中,语义初始化是基于算法的输入 - 在下面的情况下单位是某些算法的输入。初始化为0或者其他东西并不比仅仅使用已经存在于内存中的垃圾更有意义 - 这两者对于作者认为重要的算法都是无效的。
price = units * UNIT_PRICE;
gst = price * GST;