数据

用途

DATA 语句提供变量的初始值。

语法

读取语法图跳过可视语法图DATA ,data_object_list/initial_value_list/
data_object
是变量或隐式DO 列表。 任何下标或子串表达式都必须是常量表达式
隐式-DO 列表

读取语法图跳过可视语法图(do_object_list,多变量  = integer_expr1,integer_expr2 ,integer_expr3)
do_object
是数组元素,标量结构组件,子串或隐式-DO 列表
do_variable
是称为隐式DO 变量的命名标量整数变量。 此变量是语句实体。
integer_expr1integer_expr2 integer_expr3
是每个标量整数表达式。 表达式的主项只能包含其他隐式-DO 列表的常量或隐式-DO 变量,这些变量在其范围内具有此隐式-DO 列表。 每个操作都必须是内部的。
initial_value

读取语法图跳过可视语法图r * 数据值
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_valueNULL() ,那么对应的 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_expr1integer_expr2 integer_expr3建立的,与 DO 语句相同。 当执行隐式-DO 列表时,它为隐式-DO 列表的每次迭代指定 do_object_list 中的项一次,并对任何出现的隐式-DO 变量进行相应的值替换。 如果隐式DO 变量的迭代计数为 0 ,那么不会将任何变量添加到扩展序列。

do_object 中的每个下标表达式只能包含在其范围内具有下标表达式的隐式-DO 列表的常量或隐式-DO 变量。 每个操作都必须是内部的。

要使用逻辑常量初始化类型为逻辑的列表项,还可以使用缩写形式 (T 表示 .TRUE.F 表示 .FALSE.)。 如果 TF 是先前使用 PARAMETER 属性定义的常量名称,那么 XL Fortran 会将其识别为命名常量,并将其值分配给 DATA 语句中的相应列表项。

在块数据程序单元中,可以使用 DATA 语句或类型声明语句为指定公共块中的变量提供初始值。

在内部或模块子程序中,如果 data_object 与主机中的实体同名,并且 data_object 未在内部子程序中的任何其他规范语句中声明,那么不得在 DATA 语句之前引用或定义 data_object

DATA 语句无法为以下对象提供初始值:
  • 自动对象。
  • 哑参数。
  • 指定者。
  • 空白公共块中的变量。
  • 函数的结果变量。
  • 存储类为自动的数据对象。
  • 具有 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/

相关信息