C语言关键字之static用法
C语言关键字:学习了C语言之后,知道C语言有32个关键字,常用的就是int 、double 、long、char、float、short等等这些定义变量类型的关键字。
但是,也有很多大家经常常用到,但是对其了解不太全面,今天,我来给大家分享一下,static 的用法。
在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。
在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。
总结:
普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)。
静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。
在局部变量前面加上关键字static,该局部变量变成了静态局部变量,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
总结:
普通局部变量,在任何一个函数内部定义的变量都属于普通局部变量。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
void fun(void)
{
static int n; //static定义自动赋初值0
n++;
printf("n=%d\n", n);
}
int main(void)
{
int i=10; //普通变量得初始化
while(i--)
{
fun();
}
return 0;
}
该函数在主函数的10次调用下,会输出10次n的值
在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源文件中使用。
b.在文件作用域中声明的inline函数默认为static类型。
总结:
普通函数可以直接在其他文件中引用,甚至不必用extern申明。
静态函数只能在声明它的文件中可见,其他文件不能引用该函数,不同的文件可以使用相同名字的静态函数,互不影响。
/* file1.c */
static void fun(void)
{
printf("hello world !(fun())\n");
}
int main(void)
{
fun();
fun1();
return 0;
}
/* file2.c */
static void fun1(void)
{
printf("hello world !(fun1())\n\n");
}
使用 gcc file1.c file2.c编译时,错误报告如下:
在函数‘main’中:static_fun.c:(.text+0x20):对‘fun1’未定义的引用
collect2: error: ld returne
只要file2.c中不使用static修饰符,就可以了。
获取c资源:
C语言常用书籍资源
数据结构全部源代码
ID:py667py
回复 "获取c资料" 获取资料