加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 始终初始化所有变量

发布时间:2020-12-16 09:44:46 所属栏目:百科 来源:网络整理
导读:我正在阅读 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 variabl
我正在阅读 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并且回答说使用不可能的值来标记错误或其他条件是很棒的.但情况并非总是如此.例子很多:8位像素值,速度矢量等.

我总是可以看到“始终初始化变量”的一个有效替代方法是:

//logical place for declarations
T a;

/*code,for example to set up the environment for evaluating a*/

a = fooForA();

/*more code*/

fooThatUsesA(a);

这样,如果忘记了初始化,就会出现警告并修复错误,删除警告.

解决方法

所有整数都是有效的个人号码吗?

如果没有,则使用无效值初始化personal_number.

如果它们是,那么即使您没有自己初始化personal_number,它仍然保留一个有效的个人号码值 – 但该值是未知的.所以无论如何将它初始化为0 – 你没有引入问题(之前的有效数字,之后的有效数字),唯一的区别是这个数字现在已为您所知.

当然,在这两种情况下,最好不要使用整数文字进行初始化,而是做类似这样的事情:

enum { INVALID_PERSONAL_NUMBER = -1 }

int personal_number = INVALID_PERSONAL_NUMBER;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读