我正在阅读FreeBSD 编码风格并且非常喜欢它(因为我喜欢垂直紧凑的代码)。然而有这样的:
初始化所有变量
您应始终初始化变量。总是。每次。带有 -W 标志的 gcc 可能会捕获对未初始化变量的操作,但也可能不会。理由
更多的问题最终会追溯到未初始化的指针或变量。
当变量没有合适的初始值时,不给它赋值不是更好吗?这样编译器可能会捕获未初始化的读取。我不是在谈论T *p = NULL,这是一个陷阱表示,可能(或可能不是)非常有用,而是int personal_number = 0 /* but 0 is a valid personal number!!*/
为了澄清,为了回应abasu的评论,我的例子试图说明没有可用的无效值的情况。我问了一个问题,得到的答案是使用不可能的值来标记错误或其他条件非常棒。但情况并非总是如此。例子很多:8位像素值、速度矢量等。
我可以看到“始终初始化变量”的一种有效替代方法是:
//logical place for declarations
T a;
/*code, for example to set up the environment for evaluating a*/
a = fooForA();
/*more code*/
fooThatUsesA(a);
Run Code Online (Sandbox Code Playgroud)
这样,如果忘记初始化,将会出现警告,并且错误将被修复,消除警告。
所有整数都是有效的个人数字吗?
如果不是,则使用无效值进行初始化personal_number。
如果是,那么即使您没有初始化personal_number自己,它仍然保留一个有效的个人号码的值- 但该值是未知的。因此,将其初始化为0无论如何 - 您没有引入问题(之前的有效数字,之后的有效数字),唯一的区别是您现在知道该数字。
当然,在这两种情况下,最好不要使用整数文字进行初始化,而是执行如下操作:
enum { INVALID_PERSONAL_NUMBER = -1 }
int personal_number = INVALID_PERSONAL_NUMBER;
Run Code Online (Sandbox Code Playgroud)