IMPLICIT

用途

IMPLICIT 语句更改或确认本地实体的缺省隐式类型或缺省存储类,或者在指定了格式 IMPLICIT NONE 的情况下,使隐式类型规则完全失效。

语法

读取语法图跳过可视语法图IMPLICIT NONE,声明类型规范STATIC1AUTOMATIC2UNDEFINED3(range_list)
备注信息:
  • 1 IBM 扩展
  • 2 IBM 扩展
  • 3 IBM 扩展
declaration_type_spec
指定数据类型。 请参阅 类型声明 (Type Declaration)
范围
是单个字母或字母范围。 字母范围的格式为 letter1-letter2,其中 letter1 是范围内的第一个字母,letter2(跟在 letter1 后面)是范围内的最后一个字母。 美元符号 ($) 和下划线 (_) 也在允许范围内。 下划线 (_) 跟在美元符号 ($) 后面,美元符号后面是 Z。 因此,Y - _Y, Z, $, _ 相同。

规则

字母范围不能重叠;即,不能为给定的字母指定多个类型。

在给定的作用域限定单元中,如果未在 IMPLICIT 语句中指定字符,那么程序单元或接口主体中的实体的隐式类型为以字符 I-N开头的实体的缺省整数,否则为缺省实数。 内部或模块过程的缺省值与主机作用域限定单元使用的隐式类型相同。

对于以 range_list 指定的字符开头且未显式指定类型的任何数据实体名称,将提供由紧接之前的 declaration_type_spec 指定的类型。 请注意,如果派生类型可被主机作用域访问,则隐式类型推导可以是在本地作用域内不可访问的派生类型。

Fortran 2008 开始宿主作用域单元的隐式类型规则也适用于 BLOCK结构中。 Fortran 2008 结束

IMPLICIT 语句中指定的类型不能是 VECTOR 类型。

不能在 declaration_type_spec 中指定延迟长度类型参数。

对于任何数据类型,您指定为 STATICAUTOMATIC 的字符或字符范围也可以出现在 IMPLICIT 语句中。 range_list 中的字母不能在作用域限定单元中同时指定 声明式类型规范UNDEFINED 。 对于同一字母,也不能同时指定 STATICAUTOMATIC

如果在作用域限定单元中指定格式 IMPLICIT NONE ,那么必须使用类型声明语句为该作用域限定单元的本地名称指定数据类型。 不能引用没有明确定义的数据类型的名称;这使您可以控制所有无意中引用的名称。 指定 IMPLICIT NONE 时,不能在同一作用域限定单元中指定任何其他 IMPLICIT 语句,但包含 STATICAUTOMATIC的语句除外。 您可以使用 -qundef 编译器选项编译程序,以实现与在允许 IMPLICIT 语句的每个作用域限定单元中出现的 IMPLICIT NONE 语句相同的效果。

IMPLICIT UNDEFINED 关闭指定字符或字符范围的隐式数据输入缺省值。 指定 IMPLICIT UNDEFINED时,必须声明作用域限定单元中以指定字符开头的所有符号名称的数据类型。 对于没有显式定义的数据类型的作用域限定单元本地的每个符号名称,编译器都会发出一条诊断消息。

IMPLICIT 语句不会更改内部函数的数据类型。

使用 -qsave/-qnosave 编译器选项可修改存储类的预定义约定:

-qsave 编译器选项 进行预定义约定 IMPLICIT STATIC( a - _ )
-qnosave 编译器选项 进行预定义约定 IMPLICIT AUTOMATIC( a - _ )

即使指定了 -qmixed 编译器选项,范围列表项也不区分大小写。 例如,在指定了 -qmixed 的情况下, IMPLICIT INTEGER(A) 会影响以 A 开头的数据对象以及以 a开头的数据对象的隐式类型。

示例

      IMPLICIT INTEGER (B), COMPLEX (D, K-M), REAL (R-Z,A)
!  This IMPLICIT statement establishes the following
!  implicit typing:
!
!        A: real
!        B: integer
!        C: real
!        D: complex
!   E to H: real
!     I, J: integer
!  K, L, M: complex
!        N: integer
!   O to Z: real
!        $: real
!        _: real

相关信息