在C语言中:
static是修饰变量和函数
- 修饰局部变量-静态局部变量
static修饰局部变量提升了变量的生存周期,让静态局部变量出了作用域依然存在,直到程序结束,生命周期才结束。
例如:
#include <stdio.h>
void test(){
int i=0;
i++;
printf("%d ", i);
}
int main(){
for(i=0; i<10; i++){
test();
}
return0;
}
编译结果:
如果将代码改动,
void test(){
static int i=0;
i++;
printf("%d ", i);
}
则编译结果为
- 修饰全局变量-静态全局变量
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
- 修饰函数-静态函数
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
extern:可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。
- 修饰变量
举例来说,如果文件text.c需要引用add.c中变量int a,就可以在text.c中声明extern int a,然后就可以引用变量a
例如:
同时需要注意的是变量的作用域。
例如:
如果将声明外部符号放在函数中,那么只能在func函数的作用域中引用g_val变量
2. 修饰函数
从本质上来说,和变量没什么区别,函数名就是函数指针,指向函数的存储位置。
例如: