Variable and Procedure Linkage
 
模块之间和之间的名称可见性

Linkage 是指程序的一个或多个模块之间的变量,对象或过程的名称的可见性。换句话说,一个联系指示如何在模块之间共享一个名称。名称可以有两种主要的联动类型:internal external .

内部联动


internal linkage 的名称仅指在自己的模块中定义的变量,对象或过程;它们对于其他模块不可见。这意味着两个或更多的模块可以使用相同的名称来引用不同的东西。请注意,链接仅指名称的可见性,并且根据存储类和生命周期,具有内部链接的变量,对象或过程可以使用其地址在模块之间共享。

模块范围声明


声明在模块范围的变量和对象名称具有内部链接,除非另有声明ExternCommon.例如,首先使用DimStatic引入的变量名称具有内部链接,并且这些变量只能在定义它们的模块中以名称引用。请注意,使用Shared仅允许在模块过程中的名称可见性,并且不会对名称的链接做出贡献。

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

本地范围声明


在本地范围(例如Do循环或过程体)中声明的所有变量和对象名称都具有内部链接。

外部联动


具有external linkage 的名称可以指在其模块内或另一个模块中定义的变量,对象或过程。具有外部链接意味着其他模块可以看到一个名称,所有使用相同外部名称的模块都引用相同的变量,对象或过程。因此,只有一个模块可以定义一个外部名称(编译器会抱怨一个重复的定义,如果它找到具有外部链接的名称的附加定义)。

模块范围声明


声明在module-scope中声明的变量和对象名被声明为具有ExternCommon的外部链接。

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

Common声明变量具有外部链接以及定义变量。但是,与Extern不同的是,变量的Common定义可能会出现在多个模块中。当与数组一起使用时,只能声明不带下标的可变长度的数组,并且可以使用DimReDim在运行时使用数组。如果还给出了Shared范围说明符,则使用Common声明的具有外部链接的变量和对象名称仅在共享作用域中。共享变量可以在过程体系中引用。

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

默认情况下,过程名称被声明为具有外部链接。使用Public的声明明确指定外部链接。

本地范围声明


目前,在local-scope中声明的名称不能有外部链接。