静态与全局
如果我有下面的C文件,那么i和j什么区别?
#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 )中,然后它将有外部链接 ,并且可以跨文件访问。