global static 变量 和 static 函数的文件作用域指的是, file1.c 定义的 global static 变量 和 static 函数仅在 file1.c 内可以通过变量名和函数名进行访问,file2.c 不能通过提前声明的形式去获取 file1.c 的 global static 变量和 static 函数的定义,也就不能通过变量名和函数名去进行访问。但是,file1.c 可以将 global static 变量和 static 函数的指针传给 file2.c,通过指针间接进行访问。对于 local static 变量情况类似。从这个角度看,指针的存在使得作用域这个概念形同虚设。作用域服务于编译和链接过程。
不同的 c 文件内可以定义相同名字的 global static 变量和 static 函数,而不用担心 link 的时候出现 redefinition error。这个特性使得不同的人编写 global static 变量和 static 函数时,不用担心自己定义的变量名和函数名是否会与其它文件出现同名的情况,因为同名也没有关系。
传送门:static(二)