标题: 51单片机的局部变量有生存周期这一说吗,为什么我用KEIL4仿真时监控局部变量的值, [打印本页]

作者: 芯菲    时间: 2023-10-7 13:16
标题: 51单片机的局部变量有生存周期这一说吗,为什么我用KEIL4仿真时监控局部变量的值,
51单片机的局部变量有生存周期这一说吗,为什么我用KEIL4仿真时监控局部变量的值,发现局部变量的数值一直不变都在呢,
不会变没。MAIN函数大循环时局部变量的值一直都在。也不会变没。


作者: devcang    时间: 2023-10-7 13:31
代码如何的。

局部变量,任何域,就在当前范围。
作者: ccd32    时间: 2023-10-7 13:32
没有吧
作者: 123156fsadf    时间: 2023-10-7 13:59
main函数里定义的局部变量应该是一直都在的。其他函数的局部变量,会在函数返回时释放
作者: Hephaestus    时间: 2023-10-7 14:15
标准c语言的局部变量可以看《数据结构》递归那一章。

Keil c51不是标准c语言,不搞堆栈分配局部变量那一套,而是采用静态分配,举个栗子:

  1. f(){
  2. int i;
  3. }
  4. g(){
  5. int j,k;
  6. }
  7. main(){
  8. f();
  9. g();
  10. }
复制代码


在这个例子里面,局部变量i和j会共享同一个RAM地址,k就剩下来了,没有其他函数跟k共享同一个地址。
调用f()会改变g()的局部变量j的值,同样的调用g()会改变f()的局部变量i的值,但是只要不调用g()那么没有其他函数会改变k的值。
作者: 芯菲    时间: 2023-10-12 23:31
Hephaestus 发表于 2023-10-7 14:15
标准c语言的局部变量可以看《数据结构》递归那一章。

Keil c51不是标准c语言,不搞堆栈分配局部变量那一 ...

为什么局部变量i和j会共享同一个RAM地址呢?
作者: Hephaestus    时间: 2023-10-13 05:37
芯菲 发表于 2023-10-12 23:31
为什么局部变量i和j会共享同一个RAM地址呢?

编译器分析出来的,i和j不会同时被使用,共享同一地址节约空间啊!当然你一定要用让i和k共享同一空间也是可以的,你可以看最后生成的m51文件。
作者: Longan.Wang    时间: 2023-10-13 14:01
任何一个变量,都有生命周期,都有作用范围。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1