为什么需要学习链接属性?
从原始代码生成可执行的目标文件需要经过—编码,预处理,编译,汇编,链接,执行等过程。在此处提及是为了让知识能够串联起来,了解什么是链接属性,为什么需要链接属性,链接属性的作用。
什么是链接属性?
链接属性就是在链接过程中的一些规定:工程的所有源文件被编译后,规定了标识符在多个文件中多次出现时,当做一个实体处理还是多个实体处理。
链接属性分为哪几种?
链接是标识符的一种属性,指明了标识符在某一位置是否属于可见的。
标识符有三种链接属性:外部链接,内部链接,无链接。
- 1.无链接:没有链接属性的标识符会被当做单独的个体,该标识符多次被声明会被当做多个独立不同的实体。例如,多个代码块中声明的同一名字的局部变量或静态局部变量。
具有块作用域、函数作用域、函数原型作用域的变量都是无链接变量。
说明:局部变量,函数标签,函数形参。
- 2.内部链接:同一源文件名字相同,具有内部链接的标识符会被当做同一实体。但是,不同源文件名字相同,具有内部链接的标识符会被当做不同实体。
例如,在代码块外声明的全局变量或静态全局变量。 具有文件作用域的变 量可以是外部链接变量或内部链接变量。
说明:全局变量被static修饰。
- 3.外部链接:具有外部链接的标识符不管声明多少次,位于几个源文件中,都表示同一实体。 外部链接变量可以在多个文件程序中使用,内部链接变量只能在一个翻译单元中使用。
具有文件作用域的变量可以是外部链接变量或内部链接变量。
说明:没有static修饰的全局变量。
注意:
关键字extern和static用于在声明中修改标识符的链接属性。
链接属性的作用
如何处理在不同文件中出现的标识符,在源文件编译的过程中,如果有相同的标识符出现在几个不同的文件中,应该如何处理,到底是表示的是相同的实体对象还是不同的实体对象!(在博客-变量的定义与声明-中有相关的内容,可以对比学习)