static修饰符:static变量,static函数

static有两种用途:一是修饰变量,二是修饰函数

 

第一:修饰变量

例子:

static int a;

void Func()

{

    static int b;

}

全局变量默认的存储类型是extern,若不加static修饰,在不同头文件中定义名字相同的全局变量会发生冲突。static修饰符是一个能够减少这类命名冲突的有用工具。例如,以下声明语句

static int a;

其含义与下面的语句相同:

int a;

只不过,a的作用域限制在一个源文件内,对于其他源文件,a是不可见的。因此,如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以static修饰符声明。

变量b是个局部变量,在程序退出函数Func后,b就不能被使用。但是当程序再次进入函数Func时,变量b保持上次运行后的值。

 

第二:修饰函数

static修饰符不仅适用于变量,也适用于函数。一个函数,其默认存储状态也是extern。如果函数f需要调用另一个函数g,而且只有函数f需要调用函数g,我们可以把函数f与函数g都放到同一个源文件中,并且声明函数gstatic

static int

g(int x)

{

    // g函数体

}

void f()

{

    // 其他内容

    b=g (a);

}

我们可以在多个源文件中定义同名的函数g,只要所有的函数g都被定义为static,或者仅仅只有其中一个函数g不是static因此,为了避免可能出现的命名冲突,如果一个函数仅仅被同一个源文件中的其他函数调用,我们就应该声明该函数为static

 

附一篇对变量存储类型解释的帖子:

如果说得规范一点,C/C++没有全局变量,只有外部和自动。C/C++里的全局变量是靠你自己做出来的。

所有在某函数里定义的变量全是自动变量。默认是auto。在所有函数外定义的是外部变量。

如果你的程序放在单个源文件里,那它就是全局变量。如果有多个源文件,你在其中一个文件里定义那个变量,再在所有其它文件里用extern说明它。它也成了全局变量。

注意:这里很仔细地使用了“定义”和“说明”。前者引起存储分配,是真正产生那个变量。后者只是让变量在那个文件里也可见(可以访问)。

如果在定义外部变量时,加上指示符static,则生成的是静态外部变量。这种变量的作用域仅限于那个文件。也就是说,不能再在其它文件里用extern说明它。

如果在定义自动变量时,加上指示符static,则生成的是静态自动变量。作用域没变,仍然是所在的语句块。但是生命期却变成永久。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值