1 static
-
修饰局部变量
-
修饰全局变量
注意:静态全局变量仅对本文件可见
-
修饰函数
概念解析参见:命名空间&作用域&链接属性&存储期
2 extern
-
修饰全局变量
extern int a; //声明一个全局变量a
int a; //定义一个全局变量a
int a =0; //定义一个全局变量a,并初始化
extern int a =0 ; //定义一个全局变量a,并初始化
在头文件或者.c文件中,定义只能出现一次,但是声明可以出现很多次。
在头文件中定义全局变量,会导致链接时报错(重复定义)。当多个c文件包含这个头文件,即使#ifndef的条件编译,还是会出错的,因为宏名有效范围仅限于本.c文件。
因此一般是在头文件中声明全局变量,因此加extern。
-
修饰函数
由于函数的申明和定义形式不同,因此可以省略extern。
函数的声明中带有关键字extern,暗示这个函数可能在别的源文件里定义,这样会加速程序的编译(确切的说是预处理)的过程,节省时间。