微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一个被static 修饰的变量在函数中赋值问题

一个被static 修饰的变量在函数中赋值问题

时间:10-02 整理:3721RD 点击:

step被static所修饰,刚开始step可以从0->1->2这几个步骤都没有问题,执行完step = 3语句,即将退出函数(在下面1处)step 的值莫名其妙的变回2,step变量只有这个地方使用,这个是什么问题?大神们帮忙分析一下什么问题!
如下程序:
void display()
{
  static u8  step = 0;
      if(step == 0)
  {
        .
        step = 1;
    }    else if(step == 1)
   {
       step = 2;
   }
    else if(step == 2)
    {
         
         step = 3;
    }
    else if(step == 3)
    {
        ..
        step = 4;
    }
}   -------------<1

step == 2条件下的语句是 step = 3;不是1

把display的代码贴完吧。单从这几行代码看是没有问题的,可能是其他代码的原因,所以还是贴全代码吧,包括display函数被哪里调用了也描述一下

我刚刚写了一个代码来进行测试:

  1. #include <stdio.h>                                                                                                                                                                                                                 
  2.   1  
  3.   2 void display(void);
  4.   3  
  5.   4 int main(int argc, char*argv[])
  6.   5 {
  7.   6     display();
  8.   7     display();
  9.   8     display();
  10.   9     display();
  11. 10     display();
  12. 11     display();
  13. 12     display();
  14. 13     return 0;
  15. 14 }
  16. 15  
  17. 16  
  18. 17 void display()
  19. 18 {
  20. 19     static int step = 0;
  21. 20  
  22. 21     if(0 == step)
  23. 22     {
  24. 23         printf("when step = 0, printf step = %d\n", step);
  25. 24         step = 1;
  26. 25         printf("if step = 0 done, step = %d\n", step);
  27. 26     }
  28. 27     else if(1 == step)
  29. 28     {
  30. 29  
  31. 30         printf("when step = 1, printf step = %d\n", step);
  32. 31         step = 2;
  33. 32         printf("if step = 1 done, step = %d\n", step);
  34. 33     }
  35. 34     else if(2 == step)
  36. 35     {
  37. 36         printf("when step = 2, printf step = %d\n", step);
  38. 37         step = 3;
  39. 38         printf("if step = 2 done, step = %d\n", step);
  40. 39     }
  41. 40     else if(3 == step)
  42. 41     {
  43. 42         printf("when step = 3, printf step = %d\n", step);
  44. 43         step = 4;
  45. 44         printf("if step = 3 done, step = %d\n", step);
  46. 45     }
  47. 46     else
  48.         printf(" I'm here\n");
  49.   3     }
  50.   2  
  51.   1     printf("step = %d\n",step);
  52. 53  }           

复制代码


测试结果如下:

  1. when step = 0, printf step = 0
  2. if step = 0 done, step = 1
  3. step = 1
  4. when step = 1, printf step = 1
  5. if step = 1 done, step = 2
  6. step = 2
  7. when step = 2, printf step = 2
  8. if step = 2 done, step = 3
  9. step = 3
  10. when step = 3, printf step = 3
  11. if step = 3 done, step = 4
  12. step = 4
  13. I'm here
  14. step = 4
  15. I'm here
  16. step = 4
  17. I'm here
  18. step = 4

复制代码


static修饰的局部变量,可以认为他是全局变量,个人怀疑跟你的display函数的使用有关系

step==2条件里面是不是有个continue

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top