C99标准 6.2.2 标识符的链接

C99标准 6.2.2 标识符的链接

在不同作用域中或在同一作用域中多次声明的标识符可以通过称为链接 [1](linkage)的进程来引用相同的对象或函数。有三种链接:外部链接(external)、内部链接(internal)和无链接(none)。

[1] 不同标识符之间没有链接。

在构成整个程序的翻译单元(translation units)和(libraries)集合中,具有外部链接的特定标识符的每个声明都表示相同的对象或函数。在一个翻译单元中,具有内部链接的标识符的每个声明都表示相同的对象或函数。无链接的标识符的每个声明都表示一个唯一的实体。

如果对象或函数的文件作用域标识符的声明包含存储类型说明符static,则该标识符具有内部链接 [2]

[2] 只有当函数声明位于文件作用域时,函数声明才能包含static存储类型说明符;见 6.7.1。

由存储类型说明符 extern 声明的标识符,在该标识符的先前声明可见的作用域内[3],如果先前声明指定了内部或外部链接,则在随后声明中的标识符的链接与在先前声明中指定的链接相同。如果先前的声明不可见,或者先前的声明没有指定链接,则标识符具有外部链接。

[3] 如6.2.1所述,后面的声明可能隐藏前面的声明。

如果函数标识符的声明没有存储类型说明符,则它的链接被确定为与使用存储类型说明符 extern 声明的链接完全一样。如果对象标识符的声明具有文件作用域而没有存储类型说明符,则其链接是外部的。

以下标识符没有链接:声明为对象或函数以外的任何标识符;声明为函数形参的标识符;未使用存储类型说明符 extern 声明的具有块作用域的对象标识符。

如果在一个翻译单元中,相同的标识符同时包含内部和外部链接,则该行为是未定义的。

提前引用: 声明(6.7), 表达式(6.5), 外部定义(6.9), 语句(6.8)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值