C语言中的extern关键字
extern可以从如下几个方面来分析1静态存储期这个变量从程序启动到结束一直存在不会随函数结束而销毁。例外如果和_Thread_localC11-C17或thread_localC23 起组合使用则变为线程局部存储期每个线程一份独立副本线程结束即销毁。2外部链接这个变量可以被其他 .c 文件访问、使用。如果这个变量在当前作用域之前已经被声明为内部链接比如用了static那么即使后面加了extern它的链接属性也不会改变依然是内部链接只能在本文件使用。3使用范围文件作用域全局。块作用域局部。不能用在函数参数列表。4链接属性的继承规则如果标识符在之前的声明中已经带有内部链接那么即使后续用extern重声明它的链接属性也不会改变依然保持内部链接。除此之外的所有情况包括标识符之前是外部链接、无链接或是当前作用域中没有之前的声明使用extern都会让标识符获得外部链接。如果声明时没有显式写存储类说明符默认规则如下所有函数默认存储类是extern意味着函数天生具有外部链接不写extern也能被其他文件直接调用。文件作用域的变量默认存储类是extern全局变量默认具有外部链接不写extern也能被其他文件访问加static才会变成仅限本文件的内部链接。块作用域的变量默认存储类是auto局部变量默认是自动存储期仅在所属代码块内有效函数退出就销毁无跨文件链接属性。示例定义了两个c文件data.c文件内容如下inta[]{1,2,3,4,5};constintlensizeof(a)/sizeof(a[0]);main.c文件内容如下#includestdio.hintmain(){externinta[];externconstintlen;for(inti0;ilen;i){printf(%d\n,a[i]);}return0;}运行输出