在以前我刚接触单片机的时候,不对,应该说刚接触C语言时,申明一个变量后不赋值会默认赋值0,于是我在写单片机代码时经常都是申明变量后不赋值的,无论是51还是stm32,好像都没遇到过什么问题,而去年我用K60单片机做智能车时发现不赋值会发生许多莫名其妙的问题,不赋值程序就会奔溃卡死,但是同样M4内核我用stm32f4不赋值也没遇到过什么问题啊,讲道理这俩货的不同之处只是不同厂商所加的外设不同而已吧,有没有遇到跟我一样问题的小伙伴,能不能帮我解释解释
比如for(int i; i<8;i++)......;这样的代码我在stm32f4里运行好像没出过问题,而放在K60里程序就会奔溃.....
局部变量常常在栈里,栈里的内存不初始化的话,是有可能不是0的。
比如有一个函数使用过这一块栈空间,然后释放了,这个函数再去用这块栈空间,不初始化的话,还是上一个函数遗留的值
毕竟出栈操作,仅仅是POP出数据,然后修改SP。
并没有复原栈内存
这个可能是编程习惯,以及编译器处理偏好
可能有的编译器默认给你初始化了而已,但最好是显式自行初始化而不依据编译器特性,这样更安全,也好移植。
你这个问题和硬件无关,顶多就是和编译器有点关系,看编译器怎么处理的变量。还有就是变量在位置不同,有的初始化为0,有的不为0。你这个是局部变量,在进程栈空间,都初始化吧,是个好习惯,不出初始化没准哪天就出问题你自己都不知道怎么回事