- 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只是用来限制文件中函数和变量的作用域、函数体内变量的作用域,同时对变量还起到不消亡的作用。
我还真的想不到还能用在复合语句内对变量定义使之“不消亡”
realview的编译器是支持的,只不过它默认是按C90标准编译的,你在C/C++那里的编译参数里加上 --c99 就能用了。
顺便说一下,realview也支持部分gcc的扩展语法,同样也要加参数 --gnu,这样可以使用像“case 11 ... 100:”这样的范围case写法,
还有指定初始化“int a[6] = { [4] = 29, [2] = 15 };”,
还有标签值功能,用来做跳转表:
int f(int n)
{
void *const table[] = { &&a1, &&a2};
goto *table[n];
a1: return 1;
a2: return 2;
}
void *toggle(void *lab, int *x)
{
if (lab) goto *lab;
a1: *x = 1; return &&a2;
a2: *x = 0; return &&a1;
}
一周热门 更多>