我正在阅读 the FreeBSD coding style并且非常喜欢它(因为我喜欢垂直紧凑的代码)。但是有这个:
Initialize all Variables
You shall always initialize variables. Always. Every time. gcc with the flag -W may catch operations on uninitialized variables, but it may also not.Justification
More problems than you can believe are eventually traced back to a pointer or variable left uninitialized.
当变量没有合适的初始值时,让它没有值不是更好吗?这样编译器可能会捕捉到未初始化的读取。我不是在谈论 T *p = NULL
,它是一个陷阱表示,可能(或可能不会)非常有用,而是 int personal_number = 0/* 但 0 是有效的个人号码!!*/
澄清一下,作为对 abasu 评论的回应,我的示例试图说明没有可用无效值的情况。我问了question并回答说使用不可能的值来标记错误或其他条件很棒。但情况并非总是如此。例子很多:8bit 像素值、速度 vector 等。
我可以看到“始终初始化变量”的一个有效替代方法是:
//logical place for declarations
T a;
/*code, for example to set up the environment for evaluating a*/
a = fooForA();
/*more code*/
fooThatUsesA(a);
这样如果忘记初始化,会有警告,bug会被修复,去掉警告。
最佳答案
所有整数都是有效的个人号码吗?
如果不是,则使用无效值初始化personal_number
。
如果它们是,那么即使您没有自己初始化 personal_number
它仍然拥有一个有效的个人号码值 -- 但该值是未知的。因此,无论如何将它初始化为 0
——您没有引入问题(之前的有效数字,之后的有效数字),唯一的区别是您现在知道该数字。
当然,在这两种情况下,最好不要使用整数文字进行初始化,而是做这样的事情:
enum { INVALID_PERSONAL_NUMBER = -1 }
int personal_number = INVALID_PERSONAL_NUMBER;
关于c - 始终初始化所有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478932/