- void Init_system(void) REENTRANT
- {
- unsigned char i;
- P1=255;
- if(i==0)
- {
- static unsigned char b=25;
- b++; //前后多次调用Init_system()函数,此处b的值会作累积。
- P1=b;
- }
- else
- {
- P1=0;
- }
- TMOD &= 0xF0;
- TMOD |= 0x01;
- TH0 = TIMER_20MS_TH0;
- TL0 = TIMER_20MS_TL0;
- ET0 = 0;
- EA=0;
- TR0 = 0;
- }
复制代码且看上面的代码。
我一直以为static只是用来限制文件中函数和变量的作用域、函数体内变量的作用域,同时对变量还起到不消亡的作用。
我还真的想不到还能用在复合语句内对变量定义使之“不消亡”
您讲的确实有道理,不过您的实验中用的并不是static, 我想如果是用static,结果就不一样了。 还有一个问题,一般我们定义一个函数,它里面的变量最好是不要有冗余,并且都是必需的,相关的,那样更有利于程序的可读性。您举的例子中,p,q两个变量本身就没有相关性,第一种做法相当于是两个函数放在一个函数里,一个函数的外壳,其实里面是两个函数,这是正常合理的做法,而第二种做法就是有冗余的函数了,也就是说,第二种做法本身就不太合理。
不过总的来说,您提醒了我们寄存器和堆栈的区别,谢谢您的讲解。
你应该看看
- void test1(int a)
- {
- static int sum=0;
- sum+=a;
- printf("sum:%d
",sum);
- }
- void test2(int a)
- {
- int sum=0;
- sum+=a;
- printf("sum:%d
",sum);
- }
复制代码这两个调用几次看看结果有什么区别。一周热门 更多>