引起定义的事件

以下事件将导致定义变量:
  1. 执行除掩码数组赋值语句或 FORALL 赋值语句以外的内部赋值语句会导致定义等号之前的变量。

    执行定义的赋值语句可能导致在等号之前的变量的全部或部分被定义。

  2. 执行掩码数组赋值语句或 FORALL 赋值语句 可能会导致定义赋值语句中的部分或全部数组元素。
  3. 随着输入语句的执行继续,从输入文件中赋值的每个变量在数据传输到该变量时都将被定义。 执行其单元说明符标识内部文件的 WRITE 语句会导致写入的每条记录变为已定义。

    当异步输入语句的执行继续时,直到执行匹配的 WAIT 语句之后,才会定义该变量。

  4. 执行 DO 语句会导致定义 DO 变量 (如果有)。
  5. 缺省初始化可能导致初始定义变量。
  6. 开始执行由输入/输出语句中的隐式DO 列表指定的操作会导致定义隐式-DO 变量。
  7. 执行 ASSIGN 语句会导致使用语句标签值定义语句中的变量。
  8. 如果哑参数没有 INTENT(OUT),那么对过程的引用会导致定义整个哑参数数据对象,并且使用不是语句标签的值来定义整个相应的实际参数。

    如果定义了相应实际参数的相应子对象,那么对过程的引用将导致定义没有 INTENT(OUT) 的虚参数的子对象。

  9. 执行包含 IOSTAT= 说明符的输入/输出语句会导致定义指定的整数变量。
  10. Fortran 2003 开始 执行包含 IOMSG=说明符时,当出现错误、文件末尾或记录末尾时,指定的字符变量将被定义。 Fortran 2003 结束
  11. 执行包含 SIZE= 说明符的 READ 语句会导致定义指定的整数变量。
  12. 在包含 ID= 说明符的 IBM® Open XL Fortran 中执行 READWRITE 语句会导致定义指定的整数变量。
  13. IBM Open XL Fortran 中执行包含 DONE= 说明符的 WAIT 语句会导致定义指定的逻辑变量。
  14. 在包含 NUM= 说明符的 IBM Open XL Fortran 中执行同步 READWRITE 语句会导致定义指定的整数变量。

    执行包含 NUM= 说明符的异步 READWRITE 语句不会导致定义指定的整数变量。 整数变量是在执行匹配的 WAIT 语句时定义的。

  15. 如果不存在任何错误条件,那么执行 INQUIRE 语句会导致定义在执行语句期间分配了值的任何变量。
  16. 当定义了字符存储单元时,将定义所有关联的字符存储单元。

    当定义了数字存储单元时,将定义同一类型的所有关联数字存储单元,但在执行 ASSIGN 语句时,与 ASSIGN 语句中的变量关联的变量将变为未定义。 当定义了类型为 DOUBLE PRECISION 的实体时,将定义所有完全关联的双精度实类型实体。

    类型为非缺省整数的非指针标量对象 (除缺省值或双精度以外的实数) ,非缺省逻辑,非缺省复杂,任何长度的非缺省字符或非序列类型占用单个未指定的存储单元 (对于每种情况不同)。 与至少一个类型,种类和列组中的其他指针不同的指针占用单个未指定的存储单元。 当定义了未指定的存储单元时,将定义所有关联的未指定的存储单元。

  17. 当定义了缺省复杂实体时,将定义所有部分关联的缺省实际实体。
  18. 当缺省复杂实体的两个部分由于部分关联的缺省实际或缺省复杂实体而定义时,将定义缺省复杂实体。
  19. 当数字序列结构或字符序列结构的所有组件因部分关联对象被定义而被定义时,该结构被定义。
  20. 使用 STAT= 说明符执行 ALLOCATEDEALLOCATE 语句会导致定义由 STAT= 说明符指定的变量。
  21. Fortran 2003 开始 如果在执行 ALLOCATEDEALLOCATE说明符的语句时,errmsg变量会被定义。 ERRMSG=说明符的语句执行期间出现错误 ,errmsg变量将被定义。 Fortran 2003 结束
  22. 零大小数组的分配将导致定义该数组。
  23. 调用过程会导致定义该过程中任何大小为零的自动对象。
  24. 执行将指针与定义的目标相关联的指针赋值语句会导致定义指针。
  25. 调用包含非指针不可分配的自动对象的过程会导致定义该对象的所有非指针缺省初始化的子组件。
  26. 调用包含非指针不可分配 INTENT(OUT) 哑参数的过程会导致定义对象的所有非指针缺省初始化的子组件。
  27. 分配派生类型的对象,其中非指针组件通过缺省初始化进行初始化,将导致该组件及其子对象被定义。
  28. 在 Fortran 95 中使用的 FORALL 语句或构造中,当对 index-name 值集进行求值时,将定义 index-name
  29. IBM 扩展开始THREADPRIVATE非指针、不可分配的变量,如果不在 COPYIN子句中,则在进入第一个并行区域时定义,每个新线程的变量副本都将被定义。
  30. 如果在第一个并行区域的条目中定义了未在 COPYIN 子句中出现的 THREADPRIVATE 公共块,那么将定义每个新线程的变量副本。
  31. 对于在 COPYIN 子句中指定的 THREADPRIVATE 变量,每个新线程都会复制这些变量的 线程的定义,分配和关联状态。 因此,如果在进入并行区域时定义了变量的 线程副本,那么还将定义每个新线程的变量副本。
  32. 对于 COPYIN 子句中的 THREADPRIVATE 公共块,每个新线程都会复制这些公共块中变量的 线程的定义,分配和关联状态。 因此,如果在进入并行区域时定义了公共块变量的 线程副本,那么还将定义每个新线程的公共块变量副本。
  33. PARALLELPARALLEL DODOPARALLEL SECTIONSPARALLEL WORKSHARESECTIONSSINGLE 伪指令的 FIRSTPRIVATE 子句中指定变量时,每个新线程都会复制该变量的 线程的定义和关联状态。 因此,如果在进入并行区域时定义了变量的 线程副本,那么还将定义每个新线程的变量副本。
  34. 当变量,哑参数或其数据共享属性在 TASK 区域中为 firstprivate 的专用变量时,每个任务都会复制生成任务的定义以及该变量的关联。 如果在 TASK 区域的条目中定义了生成任务的变量副本,那么还会定义每个新任务的变量副本。
  35. 对于在 COPYPRIVATE 子句中指定的每个变量或公共块中的变量,在执行包含在 SINGLE 构造中的代码之后以及在团队中的任何线程离开构造之前,变量的所有副本都将定义为如下所示:
    • 如果该变量具有 POINTER 属性,那么团队中其他线程中该变量的副本与属于执行 SINGLE 构造中包含的代码的线程的变量的副本具有相同的指针关联状态。
    • 如果变量没有 POINTER属性,则团队中其他线程中的变量副本与执行 SINGLE代码的线程中的定义相同。 IBM 扩展结束
  36. Fortran 2008 开始包含 OPEN语句中的 NEWUNIT=说明符会导致说明符指定的变量被定义。 NEWUNIT=说明符所指定的变量被定义。 Fortran 2008 结束
  37. Fortran 2008 开始对于未保存、非指针、不可分配的局部变量 BLOCK构造的未保存、非指针、不可分配局部变量,执行 BLOCK包含变量的构造语句的执行会导致变量的所有非指针、默认初始化的最终组件被定义。 Fortran 2008 结束
  38. 当未在程序中指定定义时,可能会定义具有 VOLATILE 属性的对象。