范围和链接
作用域 是程序文本的最大区域,在该区域中,可以在没有限定的情况下使用名称来引用实体; 即,名称可能有效的最大区域。 广义而言,作用域是用于区分实体名称含义的一般上下文。 作用域规则与名称解析规则相结合,使编译器能够确定在文件中的给定点对标识的引用是否合法。
声明的作用域和标识的可视性是相关但不同的概念。 作用域是可用来限制程序中声明的可视性的机制。 标识的 可视性 是可以合法访问与该标识相关联的对象的程序文本区域。 作用域可以超过可视性,但可视性不能超过作用域。 当在内部声明式区域中使用重复标识时,作用域超过可视性,从而隐藏在外部声明式区域中声明的对象。 在重复标识的作用域 (第二个对象的生存期) 结束之前,不能使用原始标识来访问第一个对象。
因此,标识的作用域与标识的对象的 存储持续时间 相关,即对象保留在标识的存储区域中的时间长度。 对象的生存期受其存储持续时间的影响,进而受对象标识作用域的影响。
链接 是指名称在多个翻译单元中或在单个翻译单元中的使用或可用性。 术语 转换单元 是指源代码文件以及使用 #include 伪指令进行预处理后包含的所有头和其他源文件,减去由于条件预处理伪指令而跳过的所有源行。 链接允许将标识的每个实例与一个特定对象或函数进行正确关联。
作用域和链接在该作用域中是可区分的,是为了编译器的利益,而链接是为了链接程序的利益。 在将源文件转换为对象代码期间,编译器会跟踪具有外部链接的标识,并最终将它们存储在对象文件内的表中。 因此,链接程序能够确定哪些名称具有外部链接,但不知道具有内部链接或无链接的名称。
作用域中讨论了不同类型的作用域之间的区别。 程序链接中讨论了不同类型的链接。
相关信息