Skip to content

变量与过程的链接性 (Variable and Procedure Linkage)


模块内部和模块之间的名称可见性

链接性(Linkage) 是指变量、对象或过程的名称在程序的一个或多个模块之间的可见性。换句话说,链接性决定了名称如何在模块之间共享。名称可以有两种主要链接性类型:内部(internal)外部(external)

内部链接性

具有_内部链接性_的名称只引用在其自身模块中定义的变量、对象或过程;它们对其他模块不可见。这意味着两个或多个模块可以使用相同的名称引用不同的事物。注意,链接性只涉及名称的可见性,根据存储类和生命周期,具有内部链接性的变量、对象或过程可能通过其地址在模块之间共享。

模块作用域声明

在模块作用域声明的变量和对象名称具有内部链接性,除非另外用 ExternCommon 声明。例如,用 DimStatic 首次引入的变量名称具有内部链接性,这些变量只能在定义它们的模块中通过名称引用。注意,使用 Shared 只允许在模块的过程中可见名称,并不影响名称的链接性。

Private 声明的过程名称具有内部链接性。

局部作用域声明

所有在局部作用域(例如在 Do 循环或过程体中)声明的变量和对象名称都具有内部链接性。

外部链接性

具有_外部链接性_的名称可以引用在其模块内或在另一个模块中定义的变量、对象或过程。具有外部链接性意味着名称对其他模块是可见的,所有使用相同外部名称的模块都引用相同的变量、对象或过程。因此,只有一个模块可以定义外部名称(如果编译器发现具有外部链接性的名称的额外定义,将会报告重复定义错误)。

模块作用域声明

在模块作用域声明的变量和对象名称使用 ExternCommon 声明为具有外部链接性。

Extern 声明变量具有外部链接性,但不定义它。这个外部声明必须在同一名称的任何定义之前(没有 Extern 的声明指定内部链接性,目前,该名称的任何进一步外部声明都表示重复定义)。使用 Extern 声明的具有外部链接性的变量和对象名称始终在共享范围内,因此可以在过程体中引用。

Common 声明变量具有外部链接性,同时定义变量。但它与 Extern 不同之处在于,变量的 Common 定义可以出现在多个模块中。与数组一起使用时,只能声明不带下标的可变长数组,数组在使用前必须在运行时使用 DimReDim 设置大小。使用 Common 声明的具有外部链接性的变量和对象名称只有在同时给出 Shared 范围限定符时才在共享范围内。共享变量可以在过程体中引用。

ExternCommon 都用于声明和定义变量时,效果是 Common 语句的含义被改变,行为就像 Dim 声明一样。因此,通常不建议在同一模块中对同一变量混合使用 ExternCommon。但是,变量可以在一个模块中用 Common 声明和定义,然后在另一个模块中用 Extern 引用,不会引起混淆。

过程名称默认声明为具有外部链接性。使用 Public 的声明明确指定外部链接性。

局部作用域声明

目前,在局部作用域声明的名称不能具有外部链接性。

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系