标准之间的兼容性

此信息是为较早语言标准 (例如 FORTRAN 77 ) 的用户提供的,这些用户不熟悉更多当前语言标准 (例如 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008) ,也不熟悉 IBM® Open XL Fortran

除此处另有说明外, Fortran 90, Fortran 95 , Fortran 2003Fortran 2008 标准是与先前的 Fortran 国际标准 ISO 1539-1:1980 (非正式地称为 FORTRAN 77) 的向上兼容的扩展。 任何符合标准的 FORTRAN 77 程序在 Fortran 90 标准下都保持符合标准,但在下面有关内部过程的 4 项下说明的情况除外。 任何符合标准的 FORTRAN 77 程序在 Fortran 95 , Fortran 2003Fortran 2008 标准下都保持符合标准,只要程序中未使用任何已删除的功能部件,除非在下面关于内部过程的 4 项下说明。 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008 标准限制 FORTRAN 77 中某些依赖于处理器的功能部件的行为。 因此,使用其中一个与处理器相关的功能部件的符合标准的 FORTRAN 77 程序在 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008 标准下可能具有不同的解释,但仍然是符合标准的程序。 以下 FORTRAN 77 功能部件在 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008中具有不同的解释:
  1. FORTRAN 77 允许处理器提供比在常量用于初始化 DATA 语句中的 DOUBLE PRECISION 数据对象时可以包含在实际数据中的精度更多的从实际常量派生的精度。 Fortran 90 Fortran 95、Fortran 2003Fortran 2008 不允许这一依赖于处理器的选项。

    IBM XL Fortran 的之前发行版与 Fortran 90 和 Fortran 95 行为一致。

  2. 如果在 DATA 语句中初始化了不在公共块中的指定变量,并且未指定 SAVE 属性,那么 FORTRAN 77 将使其 SAVE 属性与处理器相关。 Fortran 90, Fortan 95 , Fortran 2003Fortran 2008 标准指定此指定变量具有 SAVE 属性。

    IBM XL Fortran 的之前发行版与 Fortran 90 和 Fortran 95 行为一致。

  3. FORTRAN 77 要求输入列表所需的字符数必须小于或等于格式化输入期间记录中的字符数。 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008 标准指定,如果记录中没有足够的字符,那么将在逻辑上使用空白填充输入记录,除非在相应的 OPEN 语句中指示 PAD='NO' 说明符。

    使用 IBM Open XL Fortran时,如果指定了 -qxlf77 编译器选项的 noblankpad 子选项,那么不会用空白填充输入记录。

  4. 除了一些内部子例程外, Fortran 90, Fortan 95 , Fortran 2003Fortran 2008 标准还具有比 FORTRAN 77 更多的内部函数。 因此,符合标准的 FORTRAN 77 程序在 Fortran 90, Fortran 95 , Fortran 2003Fortran 2008 下可能具有不同的解释 (如果它调用的过程具有与新标准内部过程之一相同的名称) ,除非该过程在 EXTERNAL 语句中指定。

    通过 IBM Open XL Fortran-qextern 编译器选项还会将指定的名称视为显示在 EXTERNAL 语句中。

  5. 在 Fortran 95 , Fortran 2003Fortran 2008中,对于某些编辑描述符,将以不同方式格式化格式化输出语句中列表项的 0 值。 此外,与 FORTRAN 77 标准不同,Fortran 95 标准指定了值的舍入方式将如何影响输出字段形式。 因此,对于某些值和编辑描述符的组合,FORTRAN 77 处理器可能产生与 Fortran 95 处理器不同的输出格式。
  6. Fortran 95 , Fortran 2003Fortran 2008 允许处理器区分正实零和负实零,而 Fortran 90 没有。 当第二个自变量为负实数零时, Fortran 95 会更改 SIGN 内部函数的行为。
  7. 要区分 ATAN2(Y, X)LOG (X)SQRT (X) 内含子中的 Fortran 95 和 Fortran 2003 对带符号零的解释,必须将 -qxlf2003=signdzerointr 子选项与 -qxlf90=signedzero 选项结合使用。 由于缺省情况下 -qxlf90=signedzero 处于开启状态,因此仅需要指定 xlf95 调用 -qxlf2003=signdzerointr 。 对于 xlf2003 ,不需要指定任何选项,因为缺省情况下这两个选项都处于开启状态。 对于 xlf90f77xlf 调用,必须指定这两个选项才能具有 Fortran 2003 标准行为。