什么是标识符的链接属性,都有哪些属性?
2017-11-14 22:14
393 查看
什么是链接属性:
如果相同的标识符出现在几个不同的源文件中时,它们会被如何处理?
标识符的链接属性(linkage)决定如何处理在不同文件中出现的标识符。标识符的作用域与它的链接属性有关,但这两个属性并不相同。
链接属性的种类:
链接属性一共有三种-----external(外部)、internal(内部)和none(无)。
(1)、属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体。
图1 中, 在缺省情况下,标识符b、c 和 f 的链接属性都为external。
即如果另一个源文件也包含了标识符 b 的声明和 c函数的原型声明,那么在那个源文件中所访问的b就是这个源文件中的 b ;在那个源文件中访问的c函数也是这个源文件中所定义的 c 函数。
关键字extern,一般而言,它为一个标识符指定external链接属性。
当extern关键字用于源文件中的一个标识符的第一次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会更改由第一次声明所指定的链接属性;如图2 中的声明4并不修改由声明1所指定的变量 i 的链接属性。
(2)、属于internal链接属性的标识符在同一个源文件内的所有声明都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。
关键字 extern 和
static 用于在声明中修改标识符的链接属性。
修改规则:如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字就可以使它的链接属性变为internal。
举个栗子:图1 中的变量b 和 函数 c 都是external链接属性;如果把它们的属性改为下面这样书写:
static int b;
static int c ( int d )
这样变量 b 和函数 c 就为这个源文件所私有。在其他源文件中,如果也链接到一个叫做 b 的变量 和
叫 c 的函数, 那么它所引用的是另一个b变量和c函数;与本源文件中的不是一个东西。
注意:static只对缺省属性为external的声明才有改变链接属性的效果。例如,你在5前面加上static关键字,效果完全不一样,因为它的缺省链接属性不是external。
(3)、没有链接属性的标识符(none)总是被当做单独的个体,也就是说该标识符的多个声明被当做独立不同的实体。
如果相同的标识符出现在几个不同的源文件中时,它们会被如何处理?
标识符的链接属性(linkage)决定如何处理在不同文件中出现的标识符。标识符的作用域与它的链接属性有关,但这两个属性并不相同。
链接属性的种类:
链接属性一共有三种-----external(外部)、internal(内部)和none(无)。
(1)、属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体。
图1 中, 在缺省情况下,标识符b、c 和 f 的链接属性都为external。
即如果另一个源文件也包含了标识符 b 的声明和 c函数的原型声明,那么在那个源文件中所访问的b就是这个源文件中的 b ;在那个源文件中访问的c函数也是这个源文件中所定义的 c 函数。
关键字extern,一般而言,它为一个标识符指定external链接属性。
当extern关键字用于源文件中的一个标识符的第一次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会更改由第一次声明所指定的链接属性;如图2 中的声明4并不修改由声明1所指定的变量 i 的链接属性。
(2)、属于internal链接属性的标识符在同一个源文件内的所有声明都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。
关键字 extern 和
static 用于在声明中修改标识符的链接属性。
修改规则:如果某个声明在正常情况下具有external链接属性,在它前面加上static关键字就可以使它的链接属性变为internal。
举个栗子:图1 中的变量b 和 函数 c 都是external链接属性;如果把它们的属性改为下面这样书写:
static int b;
static int c ( int d )
这样变量 b 和函数 c 就为这个源文件所私有。在其他源文件中,如果也链接到一个叫做 b 的变量 和
叫 c 的函数, 那么它所引用的是另一个b变量和c函数;与本源文件中的不是一个东西。
注意:static只对缺省属性为external的声明才有改变链接属性的效果。例如,你在5前面加上static关键字,效果完全不一样,因为它的缺省链接属性不是external。
(3)、没有链接属性的标识符(none)总是被当做单独的个体,也就是说该标识符的多个声明被当做独立不同的实体。
相关文章推荐
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型 分类: 嵌入式开发学习 2014-11-28 10:42 233人阅读 评论(0) 收藏
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 问题009:java当中的关键字有哪些?在Editplus文本编辑软件中是什么颜色的?java当中的标识符有什么要求?Java中注释分为几类?
- SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?
- 事务是什么?有哪些属性,并简要说明这些属性的含义。
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- css考核点整理(八)-在什么情况下通过img引入图片,什么情况用背景图引入?背景属性有哪些
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言标识符的链接属性
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(下)
- 链接里面 target属性里 _blank _parent _self _top _search 有什么区别?有什么用?
- c语言中标识符的链接属性简介
- box-sizing常用的属性有哪些?分别有什么作用?
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型