前言
在C语言的编程过程中,static语句会经常用到。本文集中讲一下static语句的使用。
一、变量前加static
当使用static语句修饰变量时,变量从普通变量就变成了静态变量。
静态变量是在函数调用退出后,可以保留操作值的。
比如:
void func()
{
static int x=0;
int y=0;
x++;
y++;
}
每次调用func函数,x的值都会加一,并且是累计的。1,2,3,4… 而y的值不会累计,每次调用结束y的值都是1。
也就是说static语句,跳出了函数局部变量调用结束后就回收的桎梏。可以保留函数的局部变量。
往深了说,普通的函数局部变量保存在栈区,加了static后,变量保存在堆区。每次函数调用完,栈区空间通过帧指针进行回收。而堆区不会回收,所以会保留。
二、函数前加static
函数前面加static是为了限制函数的可见范围。
比如:在func.c源文件中,有如下代码。
static int max_two(int a,int b)
{
return a>b?a:b;
}
int max_three(int a,int b,int c)
{
return max_two(a,b)>c?max_two(a,b):c;
}
max_two函数仅限于func.c源代码中使用,无法在别的C源代码文件中使用。而max_three函数就可以在其它的源代码文件中使用。
咱们也深入一下。 不带static的函数,会在编译的obj中间文件中,形成一个符号。通过这个符号,别的源代码文件就可以调用到该函数(前提是有函数的声明).
带static的函数,不会在obj文件中形成符号,所以无法在别的文件中调用。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了static关键字在C语言中的应用,望知晓。