Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28009
  • 博文数量: 10
  • 博客积分: 360
  • 博客等级: 一等列兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-24 20:58
文章分类

全部博文(10)

文章存档

2011年(1)

2010年(9)

我的朋友
最近访客

分类: C/C++

2010-05-05 23:06:15

函数里静态局部变量的用法
 
    函数里面静态局部变量变量放在全局变量区,作用于本函数内部,有个常用的作用是作为函数内部的标志位,通常有两种用法。
    第一种:进入函数处理的标志,只处理一次(只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;
    }
 
}
阅读(1109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~