|||
链接属性:当组成一个程序的各个源文件分别被编译后,所有的目标文件以及那些从一个或多个函数库中引用的函数链接在一起,形成可执行程序。
标识符的链接属性决定如何处理在不同文件中出现的标识符,标识符的作用域与它的链接属性有关。
Extern 和 static 用于在声明中修改标识符的链接属性,若某个声明在正常情况下有 external链接属性,在其前面加static就可以使它的链接属性变为internal如果如此声明:
Static int b; 那么b就将为这个源文件私有,若在其它源文件中也链接到一个叫b的变量,那么他所引用的是另外一个变量。
也可以把函数声明为static :static int c (int d);可以防止它被其他源文件调用。
Static只对缺省链接属性为external的声明才有改变链接属性的效果。
Extern:它为一个标识符指定external链接属性,这样可以访问其它任何位置定义的这个实体。如果你在一个地方定义变量,并在使用这个变量的其它源文件的声明中添加extern关键字,在其它文件里就可以正常使用这个变量了。
如果一个变量声明于代码块内部,在它前面添加extern将使其所引用的是全局变量而非局部变量.
Static用于函数定义时,或用于代码块之外的变量声明时,Static用于修改标识符的链接属性,从external修改为inrernal,但标识符的存储类型和作用域不受影响。
Static用于内部变量声明时,static关键字用于修改变量的存储类型,由自动变量改为静态变量,但变量的链接属性和作用域不受影响。