C语言static的学习

1、修饰变量

     当static来修饰一个变量时,给出了变量的可见范围和生命周期;

     1)修饰全局变量时           

 static int a = 0;
 int b = 0;

             变量a,b存储在全局数据区。a作用域仅是本文件可见;但b可在其它文件里通过声明extern int b来使用;

      2)修饰局部变量时             

void f(void){
    static int a;
    int b = 0;
    ...
    return;
}

              函数f中。a为局部静态变量,存储在全局数据区,b为局部变量,存储在栈上;函数退出,b的生命周期也就结束。可是a退出函数时不会被释放,但可见范围为本函数内。当再次进入本函数时,对a的改动是基于上次改动上进行。可以说a有记忆性。

2、修饰函数

     static修饰的函数作用域是当前文件,从声明位置或者定义位置,到文件结尾。如果函数没有static,那么作用域为整个工程或者说是项目。很多C项目中都有类似函数,PJSIP中:

/* Open sound dev */
static pj_status_t open_snd_dev(pjmedia_snd_port_param *param);
/* Close existing sound device */
static void close_snd_dev(void);

      Linux内核中文件中也很常见此类型的静态函数。   

  static inline void  enable_noirq(void){...}

      使用static修饰函数的优点是:全部文件能够定义同名的函数,不用考虑重名导致的编译报错;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值