声明整个应用程序或模块都可使用的变量或数组。
[Attributes] [Modifiers] GLOBAL <idVar> [:= <uValue>] [AS | IS <idType>]
[Attributes] [Modifiers] GLOBAL DIM <ArraySpec> AS | IS <idType>
Attributes | 一个可选的特性列表,用于描述实体的元信息,例如在 MsTest 类库中包含测试的方法/函数上的 [TestMethod] 属性。请注意,当特性写在关键字上方的行时,特性必须在同一行或以分号结尾。 |
Modifiers | 一个可选的修饰符列表,用于指定主体的可见性或范围,例如:PUBLIC, STATIC, INTERNAL, EXPORT 和 UNSAFE. |
<idVar> | 变量的有效标识符名称。 全局变量是一个实体,因此与其他实体共享相同的名称空间。 这就意味着,全局变量和函数不可能具有相同的名称。 |
<uValue> | 分配给 <idVar> 的常量值。 该值可以是下列数据类型的字面表示,也可以是只涉及运算符、字面表示和 DEFINE 常量的简单表达式;但不允许使用更复杂的表达式(包括类实例化)。 |
注意:虽然 <uValue> 可以是字面数组,但必须是一维数组。 不允许使用多维字面数组。 例如,{1, 2, 3} 是允许的,但 { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} } 是不允许的。 |
注意:虽然 Chr() 函数不能在 <uValue> 中使用,但 _Chr() 操作符可以。 _Chr() 在其他方面的功能与 Chr() 完全相同。 |
如果未指定 <uValue>,变量的初始值取决于所声明的数据类型(例如,如果不使用强类型,则为 NIL;如果使用 AS INT,则为 0,等等)。 |
DIM <ArraySpec> | 要声明的有维数的数组规格。 |
<ArraySpec> | 要声明的动态数组的规格。 |
在这两种情况下,<ArraySpec> 都是以下内容之一: |
<idArray>[<nElements>, <nElements>, <nElements>] |
<idArray>[<nElements>][<nElements>][<nElements>] |
除第一个 nElements 外,其他 nElements 均为可选。 |
<idArray> 是要声明的数组的有效标识符名称。 对于动态数组,数组元素初始化为 NIL。 对于有维数组,元素的初始值取决于数据类型,如上文对 <uValue> 所述。 |
<nElements> 定义数组特定维数中的元素个数。 维数由指定 <nElements> 参数的个数决定。 |
<nElements> 可以是字面数字表示或只涉及运算符、字面数字和 DEFINE 常量的简单数字表达式;但不允许使用更复杂的表达式(如函数调用)。 |
AS <idType> | 指定数据类型。如果省略,编译器依据编译选项来决定数据类型,或者是 USUAL,或者是由编译器自行决定。 |
IS <idType> | 指定 VOSTRUCT 或 UNION 数据类型,其中结构所需的内存将在堆栈中分配(<idStructure> 是唯一允许使用 IS 关键字的 <idType>)。有关数据结构内存分配的更多信息,请参阅本指南中的 VOSTRUCT 。 |
变量搜索顺序 通过声明同名变量(使用 LOCAL、MEMVAR 或 FIELD),可以从例程中隐藏全局变量名。 变量名的搜索顺序如下:
1. LOCALs, local parameters, MEMVARs, and FIELDs
2. SELF instance variables (即在类方法中没有 <idObject>: 前缀的变量)
3. GLOBALs 和 DEFINEs
下面的示例说明了如何使用 GLOBAL 语句创建全局变量、全局维数组和全局动态数组。 由于动态数组是用 STATIC GLOBAL 声明的,因此只有在当前模块中可见:
GLOBAL cAppName := "Accounts Payable" AS STRING
GLOBAL DIM aiValues[2][10] AS INT
STATIC GLOBAL aPoly[100]
...
FUNCTION Start()
? "Start of ", cAppName, " application."
AFill(aPoly, 0)
...
? "End of ", cAppName, " application."