我正在阅读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);
这样,如果忘记初始化,就会出现警告并修复错误,消除警告。