C语言关键字(1)——static

1、全局静态变量

在全局变量前加上static,该全局变量就被定义为全局静态变量。

与全局变量相比,全局静态变量的特点有:

1)未初始化的全局静态变量会被程序自动初始化为0,并且存在静态存储区

2)全局静态变量的作用域为该文件,其它文件不可使用该变量

例如:现有test1.c和main.c两个文件

//test1.c

int i = 10;
//main.c

extern int i; //使用全局变量前,必须加extern声明
int main( )
{
    printf(“%d\n”,i);
}

输出结果为:10

如果将test1.c修改为

static int i = 10;

则mian.c文件不可使用test1.c中的i。

因此,在变量前加上static可以防止外部文件修改和访问,并且两个文件出现相同变量名时也不会产生冲突。

2、局部静态变量

在局部变量前加static,可以保持局部变量的长久。局部静态变量只在程序刚开始运行的时候完成初始化,并且有且只有一次初始化。如

int fun(void)
{
    static int num = 100;
    return num—;
}

int main( )
{
    int i;
    for(i = 0; i < 3; i++)
    {
         printf(“%d\n”,fun());
    }
return 0;
}

程序运行结果为:

100

99

98

如果将static去掉,则程序运行结果为:

100

100

100

3、静态函数

在一个工程中,会有多个源文件,默认情况下各个源文件的函数是全局的。如

在test1.h中声明一个函数:void fun();

在main.c文件中,只要加入#include”test1.h”,就可以调用fun()函数。

但是如果在fun()前加上static:static void fun()

这样就算在main.c文件中加入#include”test1.h”,也不可以调用test1.h中的fun()函数。

因此,静态函数不能被其它文件访问,并且其它文件定义相同名字的函数也不会产生冲突。