函数里静态局部变量的用法
函数里面静态局部变量变量放在全局变量区,作用于本函数内部,有个常用的作用是作为函数内部的标志位,通常有两种用法。
第一种:进入函数处理的标志,只处理一次(只get一次,放到全局变量,函数再进来时不再处理,可以避免重复获取一些不会改变的内容,注意静态局部变量初始化要小心,进入函数不能用memset()等函数初始化,只能定义的时候初始化,作为一个声明,不然再进入就初始化了全局变量的内容,且因为标志位已经置位,就不会再去get);
void func(void)
{
static bool bflag = FLASE;
// 这里是声明一个这样的静态变态,只声明一次,下次再进来是不会改变;
static val = 0;
static aval[8] = {0};
//注意下面不能初始化,每次进来都初始化,就没有意义了,习惯了定义就初始化,所以特别容易出错;
memset(aval, 0, sizeof(aval));
....
if(bflag == FLASE)
{
//处理
...
val = get();
bflag = TRUE;
}
}
第二种:避免可重入的影响,例如重启函数,在处理的时候再来消息要重启,又会进入函数,这时就会有可重入产生的问题(正在重启中收到再次重启的消息,可能会造成问题);处理过程前先将标志置为反,完成处理时再将标志还原,就可以避免重入;
void func(void)
{
static bool bflag = FLASE;
....
if(bflag == FLASE)
{
bflag = TRUE;
//处理
...
restart();
bflag = FLASE;
}
}
阅读(1118) | 评论(0) | 转发(0) |