数据
用途
DATA 语句提供变量的初始值。
语法
- data_object
- 是变量或隐式DO 列表。 任何下标或子串表达式都必须是常量表达式。
- 隐式-DO 列表
- do_object
- 是数组元素,标量结构组件,子串或隐式-DO 列表
- do_variable
- 是称为隐式DO 变量的命名标量整数变量。 此变量是语句实体。
- integer_expr1、integer_expr2 和 integer_expr3
- 是每个标量整数表达式。 表达式的主项只能包含其他隐式-DO 列表的常量或隐式-DO 变量,这些变量在其范围内具有此隐式-DO 列表。 每个操作都必须是内部的。
- initial_value
-
- r
- 是一个非负标量整数常量。 如果 r 是命名常量,那么它必须先前已在作用域单元中声明,或者已经通过用法或主机关联设为可访问。
r 也可以是常量的非负标量整数子对象。 与上一段类似,如果它是命名常量的子对象,那么必须先前已在作用域单元中声明,或者已经通过用法或主机关联设为可访问。
如果 r 是常量的子对象,那么其中的任何下标都是常量表达式。 如果省略 r ,那么缺省值为 1。 r
*data_value 格式等效于数据值的 r 连续出现。 - data_value
- 是标量常量,有符号整数字面值常量,有符号实字面值常量,结构构造函数,常量的标量子对象或 NULL()。
规则
如果指定非指针对象在类型定义中具有缺省初始化,那么无法使用 DATA 语句初始化该对象。 将非指针数组对象指定为 data_object 等同于按存储顺序指定数组对象中所有元素的列表。
具有指针属性的数组只有一个对应的初始值,即 NULL()。
每个 data_object_list 必须指定与其对应的 initial_value_list 相同的项数。 这两个列表中的项之间存在一一对应关系。 这种对应关系确定每个 data_object 的初始值。
对于指针初始化,如果 data_value 是 NULL() ,那么对应的 data_object 必须具有指针属性。 如果 data_object 具有指针属性,那么对应的 data_value 必须是 NULL()。
每个 data_object 的定义 (通过其相应的 initial_value ) 必须遵循内部分配规则,但在 使用无类型常量下说明的情况除外。
如果 initial_value 是结构构造函数,那么每个组件都必须是常量表达式。 如果 data_object 是变量,那么任何子串、下标或步幅表达式都必须是常量表达式。
如果 data_value 是命名常量或命名常量的子对象,那么命名常量必须先前已在作用域单元中声明,或者已通过主机或用法关联设为可访问。 如果 data_value 是结构构造函数,那么派生类型必须先前已在作用域单元中声明,或者已通过主机或用法关联设为可访问。
零大小数组,隐式DO 列表 (迭代计数为零) 和重复因子为零的值不会向扩展的 initial_value_list添加任何变量,尽管零长度的标量字符变量会向列表添加一个变量。
可以在 DATA 语句中使用隐式DO 列表来初始化数组元素,标量结构组件和子串。 在隐式-DO 变量的控制下,隐式-DO 列表将展开为一系列标量结构组件,数组元素或子串。 数组元素和标量结构组件不能具有常量父项。 每个标量结构组件必须至少包含一个指定下标列表的组件引用。
隐式DO 列表的范围是 do_object_list。 迭代计数和隐式DO 变量的值是从 integer_expr1, integer_expr2和 integer_expr3建立的,与 DO 语句相同。 当执行隐式-DO 列表时,它为隐式-DO 列表的每次迭代指定 do_object_list 中的项一次,并对任何出现的隐式-DO 变量进行相应的值替换。 如果隐式DO 变量的迭代计数为 0 ,那么不会将任何变量添加到扩展序列。
do_object 中的每个下标表达式只能包含在其范围内具有下标表达式的隐式-DO 列表的常量或隐式-DO 变量。 每个操作都必须是内部的。
要使用逻辑常量初始化类型为逻辑的列表项,还可以使用缩写形式 (T 表示 .TRUE. , F 表示 .FALSE.)。 如果 T 或 F 是先前使用 PARAMETER 属性定义的常量名称,那么 XL Fortran 会将其识别为命名常量,并将其值分配给 DATA 语句中的相应列表项。
在块数据程序单元中,可以使用 DATA 语句或类型声明语句为指定公共块中的变量提供初始值。
在内部或模块子程序中,如果 data_object 与主机中的实体同名,并且 data_object 未在内部子程序中的任何其他规范语句中声明,那么不得在 DATA 语句之前引用或定义 data_object 。
- 自动对象。
- 哑参数。
指定者。 
- 空白公共块中的变量。
- 函数的结果变量。
存储类为自动的数据对象。 
具有 ALLOCATABLE 属性的变量。 
在可执行程序中,不能多次初始化一个变量。 如果关联两个或更多个变量,那么只能初始化其中一个数据对象。
示例
Example 1:
INTEGER Z(100),EVEN_ODD(0:9)
LOGICAL FIRST_TIME
CHARACTER*10 CHARARR(1)
DATA FIRST_TIME / .TRUE. /
DATA Z / 100* 0 /
! Implied-DO list
DATA (EVEN_ODD(J),J=0,8,2) / 5 * 0 / &
& ,(EVEN_ODD(J),J=1,9,2) / 5 * 1 /
! Nested example
DIMENSION TDARR(3,4) ! Initializes a two-dimensional array
DATA ((TDARR(I,J),J=1,4),I=1,3) /12 * 0/
! Character substring example
DATA (CHARARR(J)(1:3),J=1,1) /'aaa'/
DATA (CHARARR(J)(4:7),J=1,1) /'bbbb'/
DATA (CHARARR(J)(8:10),J=1,1) /'ccc'/
! CHARARR(1) contains 'aaabbbbccc'
Example 2:
TYPE DT
INTEGER :: COUNT(2)
END TYPE DT
TYPE(DT), PARAMETER, DIMENSION(3) :: SPARM = DT ( (/3,5/) )
INTEGER :: A(5)
DATA A /SPARM(2)%COUNT(2) * 10/
