- 主题:局部变量有必要初始化为0吗
局部变量在栈上,如果默认初始化,每个函数调用都要消耗跟这个函数所有局部变量相关的操作时间,这是不可接受的
全局变量的初始化只需要编译器处理,不消耗运行时间,当然可以有默认赋值
--
FROM 111.198.57.*
看你代码怎么用了,不初始化的变量直接给别人用,会出奇奇怪怪的结果,所以编译器给个告警。但你要是把“-Wuninitialized”这个选项去掉,也就不告警了。
如果能保证中间过程先被赋值具体的值之后,再被别人使用,就不会有问题。你这段还没有赋值就直接给printf使用,就报错了。
你试试看把memset改成:i[1]='a'; 然后printf其中的i[1]应该就可以。
除了i[1],数组其它值仍然没有初始化,如果printf其它的比如i[3],还是不行的。
【 在 freyoneby 的大作中提到: 】
: 上面的代码我发现不加memset就会告警,加了就没有,编译期这么智能?
--
修改:langman FROM 221.224.146.*
FROM 49.78.147.*
局部变量里好像只有静态局部变量会自动初始化为0
--
FROM 119.57.167.*
memset 0 就初始化了为0了
【 在 freyoneby 的大作中提到: 】
: 上面的代码我发现不加memset就会告警,加了就没有,编译期这么智能?
--
FROM 121.69.39.*