linux-c-extern-static
今天在看一个源码的时候,发现对于static 和extern
还是不太理解,so 又stackoverflow一发,记录一下。
#extern
在linux c 中,extern对于variable和function是不一样的
variable
对于variable来说,extern就是一个声明,声明目标文件在链接
的时候把几个变量链接到一起,相当于超链接或者软连接是一个道理
是一个映射,在链接的时候映射到一起,达到分享变量的目的。extern
不会分配内存,需要先声明再分配内存才可以使用,所有引用该变量的
的文件引用同一个内存,在链接文件的全局初始化段里面。
而static就是和extern相反,static声明的变量只在自己文件内部
编译,不能被链接到别的文件。引用static声明的源文件,在编译的时
候会在每一个包含文件(static声明文件)中,生成一个副本从而达到
不分享变量的目的。
function
对于function来说,extern是function的默认声明,也就是外部可以
引用,如果不想被引用就用static修饰。相当于Java/c++ 的public声明
static就是private声明。