static&extern

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,暗示这个函数可能在别的源文件里定义,这样会加速程序的编译(确切的说是预处理)的过程,节省时间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容