我正在学习C。在书中,它说只有当初始值是变量语义的一部分时才在声明变量时对其进行初始化。如果初始值是算法的一部分,请使用单独的赋值语句。例如,代替:
int price = units * UNIT_PRICE;
int gst = price * GST;
写:
int price, gst;
price = units * UNIT_PRICE;
gst = price * GST;
我不明白为什么我们应该这样做。背后的原因是什么?
这实际上只是编程风格的问题。作者的意思可能是,将声明与普通赋值分开可以使代码更清晰,更容易一目了然。另一方面,如果初始赋值是变量含义的一部分,那么可以将声明和定义结合起来。例如,具有布尔值的 int,例如
int AnExceptionHasOccurred = FALSE
。
只要您在使用之前绝对设置了一个值,那么如何做并不重要。不过,如果以后可能会发生变化,最初设置一些合理的默认值或哨兵值通常是一种不错的方式。
这是因为您无法保证未初始化的变量在设置之前被引用时可能具有什么值,这是一个样式错误。
我总是更喜欢初始化变量。
我的第一选择是准确地写出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
具有“未知”或“随机”值。
作者可能认为,在下面的代码中,初始化在语义上是基于算法的输入——在下面的情况下,units是某些算法的输入。初始化为 0 或其他值并不比仅仅让内存中已经存在的垃圾被使用更有意义——两者对于作者认为重要的算法都是无效的。
price = units * UNIT_PRICE;
gst = price * GST;