变量与过程的链接性 (Variable and Procedure Linkage)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgVarProcLinkage
- 最后更新: 2016-11-07
模块内部和模块之间的名称可见性
链接性(Linkage) 是指变量、对象或过程的名称在程序的一个或多个模块之间的可见性。换句话说,链接性决定了名称如何在模块之间共享。名称可以有两种主要链接性类型:内部(internal) 和 外部(external)。
内部链接性
具有_内部链接性_的名称只引用在其自身模块中定义的变量、对象或过程;它们对其他模块不可见。这意味着两个或多个模块可以使用相同的名称引用不同的事物。注意,链接性只涉及名称的可见性,根据存储类和生命周期,具有内部链接性的变量、对象或过程可能通过其地址在模块之间共享。
模块作用域声明
在模块作用域声明的变量和对象名称具有内部链接性,除非另外用 Extern 或 Common 声明。例如,用 Dim 或 Static 首次引入的变量名称具有内部链接性,这些变量只能在定义它们的模块中通过名称引用。注意,使用 Shared 只允许在模块的过程中可见名称,并不影响名称的链接性。
用 Private 声明的过程名称具有内部链接性。
局部作用域声明
所有在局部作用域(例如在 Do 循环或过程体中)声明的变量和对象名称都具有内部链接性。
外部链接性
具有_外部链接性_的名称可以引用在其模块内或在另一个模块中定义的变量、对象或过程。具有外部链接性意味着名称对其他模块是可见的,所有使用相同外部名称的模块都引用相同的变量、对象或过程。因此,只有一个模块可以定义外部名称(如果编译器发现具有外部链接性的名称的额外定义,将会报告重复定义错误)。
模块作用域声明
在模块作用域声明的变量和对象名称使用 Extern 或 Common 声明为具有外部链接性。
Extern 声明变量具有外部链接性,但不定义它。这个外部声明必须在同一名称的任何定义之前(没有 Extern 的声明指定内部链接性,目前,该名称的任何进一步外部声明都表示重复定义)。使用 Extern 声明的具有外部链接性的变量和对象名称始终在共享范围内,因此可以在过程体中引用。
Common 声明变量具有外部链接性,同时定义变量。但它与 Extern 不同之处在于,变量的 Common 定义可以出现在多个模块中。与数组一起使用时,只能声明不带下标的可变长数组,数组在使用前必须在运行时使用 Dim 或 ReDim 设置大小。使用 Common 声明的具有外部链接性的变量和对象名称只有在同时给出 Shared 范围限定符时才在共享范围内。共享变量可以在过程体中引用。
当 Extern 和 Common 都用于声明和定义变量时,效果是 Common 语句的含义被改变,行为就像 Dim 声明一样。因此,通常不建议在同一模块中对同一变量混合使用 Extern 和 Common。但是,变量可以在一个模块中用 Common 声明和定义,然后在另一个模块中用 Extern 引用,不会引起混淆。
过程名称默认声明为具有外部链接性。使用 Public 的声明明确指定外部链接性。
局部作用域声明
目前,在局部作用域声明的名称不能具有外部链接性。
返回 目录