- 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只是用来限制文件中函数和变量的作用域、函数体内变量的作用域,同时对变量还起到不消亡的作用。
我还真的想不到还能用在复合语句内对变量定义使之“不消亡”
按我的理解,作用域的最小单位是按函数来划分的,把它限制在更小的范围里也没有意义,你还是要有那些空间被它占用掉。
对现在的C编译器来说,应该是按语句块来划分的,比如gcc下for循环就能这么写:
for (int i=0; i<10; i++) { ... }
此时 i 的作用域就仅限于这个for循环中。
但是对于静态变量来说,由于在链接时一般会和全局变量一样,都有分配独立的地址空间,所以它的作用域限制只是编译器编译时判断的,如果运行中试图以指针方式去操作那个地址的话,还是能在作用域外部修改静态变量的。
一周热门 更多>