int f(void)
{
// static int b = 0; //①
// int b = 0; //②
// int b; //③
b++;
return b;
}
void main()
{
Init();
while(1)
{
m = f();
rs_write(m);
delay_ms(1000);
}
}
做了三个测试,程序如上,只有定义变量的方式不同。
①是静态存储付初值0,②是动态存储付初值0,③是动态存储不付初值。
都是局部变量,主函数一直调用,理论上①应该b一直增加,②b每次重置0,③也同②或者b的值可能随机。
但是测试结果,①②同理论,但③的结果与①一样,在不断增加,看书上写的局部动态存储变量应该每次调用完自动释放空间,变量值就会被清楚啊。
有懂的朋友吗,麻烦分析分析。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
好的,我试试。测试又发现个问题,上面是51的测试,我换成32测试,结果是int b,每次调用函数,b都被初始为1.怀疑是不同单片机设置不同。我看看地址确认下
变量的初始化应该是编译器负责的。51和stm32的编译器不同吧可能是
解释得很好,我就是碰到了这个问题所以来问问,以后才能注意到严谨一些
一周热门 更多>