静态与全局

如果我有下面的C文件,那么ij什么区别?

 #include <stdio.h> #include <stdlib.h> static int i; int j; int main () { //Some implementation } 

i有内部链接,所以你不能在其他源文件(严格翻译单位)中使用名称来引用同一个对象。

j有外部链接,所以如果你在另一个翻译单元中声明它,你可以用j来引用这个对象。

i在模块外面是不可见的; j是全球可访问的。

也就是说,链接到它的另一个模块可以做到

 extern int j; 

然后能够读写j的值。 同样的其他模块不能访问i ,但可以声明它自己的实例,甚至是全局的 – 这是第一个模块不可见的。

不同的是i有内部联系, j有外部联系。 这意味着您可以从其他链接的文件访问j ,而i只能在声明的文件中使用。

i将有静态链接 ,即variables只能在当前文件中访问。

j应该被定义为extern ,也就是说

 extern int j; 

在另一个头文件( .h )中,然后它将有外部链接 ,并且可以跨文件访问。