静态与全局
如果我有下面的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
)中,然后它将有外部链接 ,并且可以跨文件访问。