Oracle Solaris Studio 12.2:Fortran 用户指南

第 4 章 Solaris Studio Fortran 的功能与差异

本附录介绍了标准 Fortran 与 Solaris Studio Fortran 编译器 f95 之间的一些主要功能差异。

4.1 源语言功能

f95 编译器提供标准 Fortran 的以下源语言功能和扩展

4.1.1 续行限制

f95 允许 999 个续行(1 个初始行和 999 个续行)。对于固定格式,标准 Fortran 允许 19 个续行;对于自由格式,允许 39 个续行。

4.1.2 固定格式源代码行

在固定格式源代码中,行的长度可以超过 72 个字符,但忽略第 73 列以后的任何内容。标准 Fortran 95 仅允许 72 个字符长的行。

4.1.3 制表符格式

f95 固定格式源代码文本的定义如下:

对于固定格式,f95 的缺省最大行长度是 72 列;对于自由格式,则为 132 列。使用 -e 编译器选项,可将固定格式源代码中的行扩展到 132 列。

示例: 左侧的制表符格式源代码的处理方式如右侧所示。


!^IUses of tabs
^ICHARACTER *3 A = ’A’
^IINTEGER B = 2
^IREAL C = 3.0
^IWRITE(*,9) A, B, C
9^IFORMAT(1X, A3,
^I1 I3,
^I2 F9.1 )
^IEND

!       Uses of tabs
        CHARACTER *3 A = ’A’
        INTEGER B = 2
        REAL C = 3.0
        WRITE(*,9) A, B, C
9       FORMAT(1X, A3,
       1 I3,
       2 F9.1 )
        END

在以上示例中,"^I" 代表制表符,以 "1" 和 "2" 开头的行是续行。显示此代码的目的在于说明各种制表符情形,而不是提倡任一样式。

f95 中的制表符会强制填充剩余的行直到第 72 列。如果制表符出现在持续到下一行的字符串中,则可能会引发意外结果:

源文件:


^Iprint *, "Tab on next line
^I1this  continuation line starts with a tab."
^Iend

运行代码:


Tab on next line                                             this  continuation
 line starts with a tab.

此外,对于制表符格式允许使用 —f77 选项。

4.1.4 采用的源代码格式

f95 采用的源代码格式取决于选项、指令和后缀。

具有 .f.F 后缀的文件采用固定格式。带 .f90.f95.F90.F95 后缀的文件假定采用自由格式。

表 4–1 F95 源代码格式命令行选项

选项  

操作  

-fixed

将所有源文件解释为 Fortran 固定格式

-free

将所有源文件解释为 Fortran 自由格式

如果使用 -free-fixed 选项,则它覆盖文件名后缀。如果使用 !DIR$ FREE!DIR$ FIXED 指令,则它覆盖选项和文件名后缀。

4.1.4.1 混合格式

允许混合使用某些源代码格式。

4.1.4.2 大小写

缺省情况下,Solaris Studio Fortran 不区分大小写。这意味着,变量 AbcDeF 的处理方式与将其拼写为 abcdef 时相同。要让编译器区别处理大写字母和小写字母,请使用 -U 选项进行编译。

4.1.5 限制和缺省值

4.2 数据类型

本节介绍 Fortran 数据类型的功能和扩展。

4.2.1 布尔类型

f95 支持布尔类型的常量和表达式。但是,没有布尔变量或数组,也没有布尔类型语句。

4.2.1.1 控制布尔类型的各种规则

4.2.1.2 布尔常量的替代格式

f95 允许使用以下替代格式(没有二进制)的布尔常量(八进制、十六进制或霍尔瑞斯)。不能将变量声明为布尔型。标准 Fortran 不允许使用这些格式。

八进制

ddddddB,其中 d 是任意八进制数字

在 I/O 格式规范中,字母 B 表示二进制数字;而在其他地方则表示八进制数字。

十六进制

X’dddX"ddd ",其中 d 是任意十六进制数字

霍尔瑞斯

接受的霍尔瑞斯数据格式为:

nH

’H

""H

nL

’L

""L

nR

’R

""R

上面的 "…" 是字符串,n 是字符数。

示例: 八进制和十六进制常量。

布尔常量  

32 位字的内部八进制数  

0B

00000000000

77740B

00000077740

X"ABE"

00000005276

X"-340"

37777776300

X’1 2 3’

00000000443

X’FFFFFFFFFFFFFFFF’

37777777777

示例: 赋值语句中的八进制和十六进制数。


i = 1357B
j = X"28FF"
k = X’-5A’

在算术表达式中使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误。

4.2.1.3 布尔常量的替代上下文

f95 允许在非 DATA 语句中使用 BOZ 常量。

Bbbb

Oooo

Zzzz

B"bbb"

O"ooo"

Z"zzz"

如果将它们赋值给实数变量,则不进行类型转换。

标准 Fortran 只允许在 DATA 语句中使用它们。

4.2.2 数值数据类型的缩写大小表示法

f95 允许在声明语句、函数语句和 IMPLICIT 语句中使用以下非标准的类型声明格式。第一列中的格式虽然已被广泛使用,但它们是非标准的 Fortran 格式。第二列中的种类数字可能会因供应商不同而异。

表 4–2 数值数据类型的大小表示法

非标准 

声明符 

简短形式 

含义 

INTEGER*1

INTEGER(KIND=1)

INTEGER(1)

有符号的单字节整数 

INTEGER*2

INTEGER(KIND=2)

INTEGER(2)

有符号的双字节整数 

INTEGER*4

INTEGER(KIND=4)

INTEGER(4)

有符号的 4 字节整数 

LOGICAL*1

LOGICAL(KIND=1)

LOGICAL(1)

单字节逻辑值 

LOGICAL*2

LOGICAL(KIND=2)

LOGICAL(2)

双字节逻辑值 

LOGICAL*4

LOGICAL(KIND=4)

LOGICAL(4)

4 字节逻辑值 

REAL*4

REAL(KIND=4)

REAL(4)

IEEE 单精度 4 字节浮点值 

REAL*8

REAL(KIND=8)

REAL(8)

IEEE 双精度 8 字节浮点值 

REAL*16

REAL(KIND=16)

REAL(16)

IEEE 四精度 16 字节浮点值 

COMPLEX*8

COMPLEX(KIND=4)

COMPLEX(4)

单精度复数(每个部分 4 个字节) 

COMPLEX*16

COMPLEX(KIND=8)

COMPLEX(8)

双精度复数(每个部分 8 个字节) 

COMPLEX*32

COMPLEX(KIND=16)

COMPLEX(16)

四精度复数(每个部分 16 个字节) 

4.2.3 数据类型的大小和对齐

存储和对齐始终以字节为单位。可以划分为单字节的值按字节对齐。

类型的大小和对齐取决于各种编译器选项和平台以及变量的声明方式。COMMON 块中的缺省最大对齐位置是 4 字节边界。

使用特殊选项(如 -aligncommon-f-dalign-dbl_align_all- xmemalign- xtypemap)进行编译,可以更改缺省的数据对齐和存储分配。本手册中的缺省描述假定这些选项无效。

Fortran 编程指南》提供了有关某些平台上数据类型和对齐方式特例的其他信息。

下表汇总了缺省的大小和对齐,并忽略类型和选项的其他方面。

表 4–3 缺省的数据大小和对齐(以字节为单位)

Fortran 数据类型 

大小 

缺省对齐 

COMMON 中的对齐  

BYTE X

CHARACTER X

CHARACTER*n X

COMPLEX X

COMPLEX*8 X

DOUBLE COMPLEX X

COMPLEX*16 X

COMPLEX*32 X

16 

16 

32 

8/16 

DOUBLE PRECISION X

REAL X

REAL*4 X

REAL*8 X

REAL*16 X

16 

8/16 

INTEGER X

INTEGER*2 X

INTEGER*4 X

INTEGER*8 X

LOGICAL X

LOGICAL*1 X

LOGICAL*2 X

LOGICAL*4 X

LOGICAL*8 X

请注意以下事项:

选项 -f-dalign 可强制将所有 8、16 或 32 字节数据与 8 字节边界对齐。选项 -dbl_align_all 可使所有数据与 8 字节边界对齐。如果程序依赖于这些选项的使用,则可能无法进行移植。

4.3 Cray 指针

Cray 指针是一个变量,其值是另一个实体(称为指针对象)的地址。

f95 支持 Cray 指针;标准 Fortran 95 不支持。

4.3.1 语法

Cray POINTER 语句采用以下格式:


POINTER  ( pointer_name, pointee_name [array_spec] ), …

其中,pointer_namepointee_namearray_spec 如下所示:

pointer_name

指向相应 pointee_name 的指针。

pointer_name 包含 pointee_name 的地址。必须是一个标量变量名称(但不是派生类型)。不能是常量、结构名称、数组或函数。

pointee_name

指向相应 pointer_name 的指针对象

必须是: 变量名、数组声明符或数组名称

array_spec

如果 array_spec 存在,则它必须是显形(常量或非常量边界)或者假定大小。

例如,可以声明指向两个指针对象的 Cray 指针:


    POINTER ( p, b ),  ( q, c )

以上示例声明 Cray 指针 p 及其指针对象 b 以及 Cray 指针 q 及其指针对象 c

还可以声明指向数组的 Cray 指针:


     POINTER ( ix, x(n, 0:m) )

以上示例声明 Cray 指针 ix 及其指针对象 x;并将 x 声明为 n x (m+1) 维数组。

4.3.2 Cray 指针的用途

通过将变量与存储块中的特定位置动态关联起来,您可以使用指针访问用户管理的存储。

Cray 指针允许访问绝对内存地址。

4.3.3 声明 Cray 指针和 Fortran 95 指针

Cray 指针声明如下:

POINTER ( pointer_name, pointee_name [array_spec] )

Fortran 95 指针声明如下:

POINTER object_name

不能混用这两种类型的指针。

4.3.4 Cray 指针的功能

4.3.5 Cray 指针的限制

4.3.6 Cray 指针对象的限制

4.3.7 Cray 指针的用法

可以将 Cray 指针赋值如下:

示例: 按上述方式使用 Cray 指针。


    SUBROUTINE  sub ( n )
    COMMON pool(100000)
    INTEGER blk(128), word64
    REAL a(1000), b(n), c(100000-n-1000)
    POINTER ( pblk, blk ), (ia, a ), ( ib, b ), &
            ( ic, c ), ( address, word64 )
    DATA address / 64 /
    pblk = 0
    ia = LOC( pool )
    ib = ia + 4000
    ic = ib + n
    ...

有关以上示例的说明:

4.4 STRUCTUREUNION (VAX Fortran)

为帮助迁移用旧版 FORTRAN 77 编写的程序,f95 接受 VAX Fortran STRUCTUREUNION 语句,它是 Fortran 95 中“派生类型”的前身。有关语法的详细信息,请参见《FORTRAN 77 Language Reference》手册。

STRUCTURE 中的字段声明可以是以下内容之一:

与传统 f77 编译器相同,POINTER 语句不能用作域声明。

f95 还允许:

4.5 无符号整数

Fortran 编译器接受新的数据类型 UNSIGNED 作为对该语言的一种扩展。UNSIGNED 接受四个 KIND 参数值: 1、2、4 和 8,分别对应于 1、2、4 和 8 字节无符号整数。

无符号整型常量的形式是:数字串后跟大写或小写字母 U,再后跟一个下划线和种类参数(可选)。下面的示例显示了无符号整型常量的最大值:


         255u_1
         65535u_2
         4294967295U_4
         18446744073709551615U_8

如果没有使用种类参数 (12345U),则缺省值与缺省整数相同。缺省值为 U_4,但可以使用 -xtypemap 选项更改它,这会更改缺省无符号整数的种类类型。

可使用 UNSIGNED 类型说明符声明无符号整型变量或数组:


        UNSIGNED U
        UNSIGNED(KIND=2) :: A
        UNSIGNED*8 :: B

4.5.1 算术表达式

4.5.2 关系表达式

可以使用内部关系运算来比较有符号和无符号整型操作数。其结果基于未修改的操作数的值。

4.5.3 控制构造

4.5.4 输入/输出构造

4.5.5 内部函数

4.6 Fortran 200x 的功能

此发行版的 Solaris Studio Fortran 编译器中引入了 Fortran 2003 标准中的许多新功能。有关详细信息,请参阅 Fortran 2003 标准。同时也引入了 Fortran 2008 草案标准中所建议的一些功能。有关这些功能的详细信息,请参见相应的草案出版物。

4.6.1 与 C 函数之间的互操作性

新的 Fortran 标准提供了以下内容:

ISO_C_BINDING 模块提供了对命名常量的访问,这些命名常量是种类类型参数,它们代表了与 C 类型兼容的数据。

该标准还引入了 BIND(C) 属性。如果 Fortran 派生类型具有 BIND 属性,则它可以与 C 之间进行互操作。

此发行版的 Fortran 编译器实现了该标准第 15 章中描述的这些功能。如标准中第 4 章所述,Fortran 还提供了用于定义与 C 类型对应的派生类型和枚举的工具。

4.6.2 IEEE 浮点异常处理

在 Fortran 语言中,新的内部模块 IEEE_ARITHMETICIEEE_FEATURES 提供了对异常和 IEEE 算法的支持。对这些功能提供完整支持的是:

USE, INTRINSIC :: IEEE_ARITHMETIC

USE, INTRINSIC :: IEEE_FEATURES

INTRINSIC 关键字是 Fortran 2003 中的新增功能。这些模块定义了一组派生类型、常量、舍入模式、查询函数、基本函数、种类函数、基本和非基本子例程。有关详细信息,请参见 Fortran 2003 标准的第 14 章。

4.6.3 命令行参数内部函数

Fortran 2003 标准引入了三个新的内部函数,用来处理命令行参数和环境变量。包括:

4.6.4 PROTECTED 属性

现在,Fortran 编译器接受 Fortran 2003 的 PROTECTED 属性。PROTECTED 对模块实体的使用进行了限制。具有 PROTECTED 属性的对象只能在声明这些对象的模块中定义。

4.6.5 Fortran 2003 异步 I/O

编译器可识别 I/O 语句中的 ASYNCHRONOUS 说明符:

ASYNCHRONOUS=[’YES’ | ’NO’]

此语法是在 Fortran 2003 标准第 9 章中提出的。在与 WAIT 语句结合使用的情况下,允许程序员指定可能与计算重叠的 I/O 进程。虽然编译器可以识别 ASYNCHRONOUS=’YES’,但标准不要求实际的异步 I/O。在本发行版的编译器中,I/O 始终是同步的。

4.6.6 扩展的 ALLOCATABLE 属性

Fortran 2003 扩展了 ALLOCATABLE 属性所允许的数据实体。以前,仅限本地存储的数组变量使用该属性。现在,允许将它用于:

在可分配实体可能与存储关联的所有位置,仍然禁止使用可分配实体: COMMON 块和 EQUIVALENCE 语句。可分配数组组件可以以 SEQUENCE 类型出现,但在 COMMONEQUIVALENCE 中禁止使用此类型的对象。

4.6.7 VALUE 属性

f95 编译器接受 Fortran 2003 VALUE 类型声明属性。

如果使用此属性指定子程序哑元输入参数,则表明“按值”传递实际参数。以下示例说明如何将 VALUE 属性用于一个 C 主程序,该主程序将文字值作为参数来调用 Fortran 子程序:


C code:
#include <stdlib.h>
int main(int ac, char *av[])
{
    to_fortran(2);
}

Fortran code:
       subroutine to_fortran(i)
       integer, value :: i
       print *, i
       end

4.6.8 Fortran 2003 流 I/O

Fortran 2003 标准定义了一个新的“流”I/O 方案。流 I/O 访问将数据文件作为可按从 1 开始的正整数编址的持续字节序列来处理。可以连接数据文件用于有格式访问或无格式访问。

可以在 OPEN 语句中使用 ACCESS='STREAM' 说明符来声明流 I/O 文件。字节地址文件定位要求 READWRITE 语句中有 POS=scalar_integer_expression 说明符。INQUIRE 语句接受 ACCESS=’STREAM’、说明符 STREAM=scalar_character_variablePOS=scalar_integer_variable

4.6.9 Fortran 2003 格式化 I/O 功能

f95 中,已实现了三个新的 Fortran 2003 格式化 I/O 说明符。它们可以出现在 OPENREADWRITEPRINTINQUIRE 语句中:

INQUIRE 语句中使用时,这些说明符声明一个字符变量以返回当前值。

新的编辑描述符 DPDCRPRC 将单个 FORMAT 语句中的缺省设置分别更改为小数点、小数逗号、处理器定义的舍入以及兼容的舍入。例如:

WRITE(*,’(I5,DC,F10.3)’) N, W

F10.3 输出项中打印逗号而不是句点。

要了解如何更改格式化 I/O 的浮点舍入模式,另请参见 -iorounding 编译器命令行选项。(3.4.45 –iorounding[={ compatible|processor-defined}]

4.6.10 Fortran 2003 IMPORT 语句

IMPORT 语句指定主机作用域单元中可由主机关联访问的实体。仅在接口主体中允许使用。

4.6.11 Fortran 2003 FLUSH I/O 语句

f95 编译器接受 Fortran 2003 FLUSH 语句。FLUSH 语句使写入外部文件的数据可用于其他进程;通过除 Fortran 以外的其他方法使外部文件中的数据可用于 READ 语句。

4.6.12 Fortran 2003 POINTER INTENT 功能

现在,Fortran 编译器支持 POINTER 哑元参数的 INTENT 属性:可以为指针 dummy 指定 INTENT(IN)、INTENT(OUT)INTENT(INOUT)

例如,


subroutine sub(P)
integer, pointer, intent(in) :: p
...

end

指针的 INTENT 属性应用于指针,而非指针所指向的元素,因此对于 INTENT(IN) 指针,以下语句是非法的,因为这些语句将修改指针:


 p => t
 allocate(p)
 deallocate(p)

但以下语句对于 INTENT(IN) 指针是合法的,因为它修改指针所指向的元素:


 p = 400

4.6.13 Fortran 2003 中增强的数组构造函数

数组构造函数中允许使用方括号代替 (//)


X = [ 3.2, 4.01, 6.5 ]

Fortran 2003 标准允许使用方括号作为数组构造函数。这可能会与区间常量冲突。如果在不带 -xia 选项(或用于启用区间运算的类似选项)的情况下使用方括号,这些方括号将被视为数组构造函数。如果使用 -xia 选项,这些方括号将被视为常量。区间用户应继续使用 (/ /) 数组构造函数,以避免出现编译错误。

4.6.14 Fortran 2003 和 Fortran 2008 的其他功能

有关下列 Fortran 2003 功能的详细信息,请参阅已发布的 Fortran 2003 标准。发布的 Fortran 200x 草案文档中介绍了 Fortran 2008 的功能。

4.7 其他的 I/O 扩展

本节介绍一些 Fortran 95 输入/输出处理扩展,f95 编译器接受这些扩展,但它们不是 Fortran 2003 标准的一部分。某些扩展是在 Fortran 77 编译器 f77 中出现的 I/O 扩展,现在这些扩展已成为 Fortran 编译器的一部分。

4.7.1 I/O 错误处理例程

通过两个新函数,用户可以为逻辑单元上的格式化输入指定自己的错误处理例程。当检测到格式错误时,运行时 I/O 库会调用指定的由用户提供的处理程序例程,同时将数据指向输入行中导致错误的字符。处理程序例程可以提供一个新字符,并允许 I/O 操作在检测到错误的点上使用新字符继续运行;或者采用缺省的 Fortran 错误处理操作。

新例程 SET_IO_ERR_HANDLER(3f)GET_IO_ERR_HANDLER(3f) 是模块子例程,这两个例程要求在调用它们的例程中使用 USE SUN_IO_HANDLERS。要详细了解这些例程,请参见手册页。

4.7.2 变量格式表达式

Fortran 77 允许用尖括号括起的任意表达式来代替具有某种格式的任何整数常量:

1 FORMAT(< expr > … )

变量格式表达式不能作为 nH… 编辑描述符中的 n 出现在 ASSIGN 语句引用的 FORMAT 语句中,或者出现在并行区域内的 FORMAT 语句中。

这种功能是在 f95 中自动启用的,并且不要求使用-f77 兼容性选项标志。

4.7.3 NAMELIST 输入格式

4.7.4 二进制未格式化 I/O

使用 FORM=’BINARY’ 打开文件与使用 FORM=’UNFORMATTED’ 具有大致相同的效果,所不同的是文件中没有嵌入记录长度。如果没有此数据,则无法知道一条记录的开始或结束位置。因此,无法对 FORM=’BINARY’ 文件执行 BACKSPACE 操作,这是因为不知道要退格到什么位置。对 ’BINARY’ 文件执行 READ 操作时,将按需要读取尽可能多的数据来填充输入列表中的变量。

4.7.5 各种 I/O 扩展

4.8 指令

编译器指令指示编译器执行某些特殊的操作。指令又称 pragma

可以将编译器指令作为一个或多个文本行插入到源程序中。每一行看起来就像注释一样,但其中包含的其他字符可将其标识为不仅仅是该编译器的注释。对于大多数其他编译器,它被处理为注释,因此具有一定的代码移植性。

有关 Fortran 指令的完整摘要,请参见附录 C

4.8.1 特殊 f95 指令行的格式

除了1.8 命令行帮助中介绍的指令外,f95 还可识别其自己的特殊指令。这些指令使用以下语法:


!DIR$ d1, d2, …

4.8.1.1 固定格式源代码

4.8.1.2 自由格式源代码

因此,第 1 至第 5 列中的 !DIR$ 既用于自由格式源代码又用于固定格式源代码。

4.8.2 FIXEDFREE 指令

这些指令指定指令行后面行的源代码格式。

4.8.2.1 作用域

它们适用于所在文件的其余部分,或者在遇到下一个 FREEFIXED 指令之前的部分。

4.8.2.2 用法

4.8.2.3 限制

FREE/FIXED 指令:

示例: 一个 FREE 指令。


!DIR$ FREE
    DO i = 1, n
        a(i) = b(i) * c(i)
    END DO

4.8.3 并行化指令

并行化指令是一种特殊的注释,它指示编译器尝试并行处理下一个 DO 循环。附录 D 中对这些指令进行概述,《Fortran 编程指南》中有关并行化的一章介绍了这些指令。Sun 和 Cray 样式并行化指令现已过时,应首选使用 OpenMP Fortran API 指令和并行化模型。《OpenMP API 用户指南》中介绍了 OpenMP 并行化。

4.9 模块文件

在编译包含 Fortran 95 MODULE 的文件时,会为在源代码中遇到的每个 MODULE 生成模块接口文件(.mod 文件)。文件名是从 MODULE 的名称中派生的;将为 MODULE xyz 创建文件 xyz.mod(全部小写)。

编译还会为包含 MODULE 语句的源文件生成 .o 模块实现目标文件。可与模块实现目标文件以及所有其他目标文件链接在一起以创建可执行文件。

编译器在 -moddir=dir 标志或 MODDIR 环境变量指定的目录中创建模块接口文件和实现目标文件。如果没有指定,则编译器在当前工作目录中写入 .mod 文件。

在编译 USE modulename 语句时,编译器在当前工作目录中查找接口文件。使用 - Mpath 选项,可以为编译器指定其他搜索路径。必须在链接步骤的命令行中显式列出模块实现目标文件。

通常,程序员为每个文件定义一个 MODULE,并为 MODULE 及包含它的源文件指定相同的名称。但是,这并不是必需的。

在本示例中,同时编译所有的文件。模块源文件在主程序使用它们之前就已出现。


demo% cat mod_one.f90
 MODULE one
    ...
 END MODULE
demo% cat mod_two.f90
 MODULE two
    ...
 END MODULE
demo% cat main.f90
 USE one
 USE two
   ...
 END
demo% f95 -o main mod_one.f90 mod_two.f90 main.f90

编译创建以下文件:

mainmain.oone.modmod_one.otwo.modmod_two.o

下一个示例单独编译每个单元,并将它们链接在一起。


demo% f95 -c mod_one.f90 mod_two.f90
demo% f95 -c main.f90
demo% f95 -o main main.o mod_one.o mod_two.o

在编译 main.f90 时,编译器在当前目录中搜索 one.modtwo.mod。必须先编译这些文件,再编译在 USE 语句中引用模块的任何文件。链接步骤要求模块实现目标文件 mod_one.omod_two.o 与所有其他目标文件一起出现,以创建可执行文件。

4.9.1 搜索模块

在发行的 7.0 版的 Fortran 编译器中,可以将 .mod 文件存储在归档 (.a) 文件中。要在归档中搜索模块,必须在命令行的 -Mpath 标志中显式指定它。在缺省情况下,编译器并不搜索归档文件。

仅搜索与 USE 语句中出现的名称同名的 .mod 文件。例如,Fortran 语句 USE mymod 使编译器缺省搜索模块文件 mymod.mod

在搜索过程中,编译器为在其中写入模块文件的目录指定更高的优先级。可以使用 -moddir=dir 选项标志和 MODDIR 环境变量对此进行控制。这意味着,如果仅指定了 -Mpath 选项,则首先搜索当前目录,然后再搜索 -M 标志上列出的目录和文件。

4.9.2 -use=list 选项标志

-use=list 标志强制将一个或多个隐式 USE 语句添加到每个使用该标志编译的子程序或模块子程序中。通过使用该标志,使得在库或应用程序的某个功能要求使用模块或模块文件时,不必修改源程序。

使用 -use=module_name 进行编译,可将 USE module_name 语句添加到正在编译的每个子程序或模块中。使用 -use=module_file_name 进行编译,与为 module_file_name 文件中包含的每个模块添加 USE module_name 具有相同的效果。

4.9.3 fdumpmod 命令

使用 fdumpmod(1) 命令可显示有关已编译模块信息文件的内容的信息。


demo% fdumpmod x.mod group.mod
x 1.0 v8,i4,r4,d8,n16,a4 x.mod
group 1.0 v8,i4,r4,d8,n16,a4 group.mod

fdumpmod 命令将在单个 .mod 文件、通过串联 .mod 文件形成的文件以及 .mod 文件的 .a 归档中显示有关模块的信息。显示的内容包含模块名称、版本号、目标体系结构,以及用来指示与模块兼容的编译选项的标志。有关详细信息,请参见 fdumpmod(1) 手册页。

4.10 内部函数

f95 支持某些内在过程,它们是超出标准的扩展。

表 4–4 非标准的内部函数

名称 

定义 

函数类型 

参数类型 

参数 

说明 

COT

余切 

实型 

实型 

([X=]x)

P, E 

DDIM

正偏差 

双精度 

双精度 

([X=]x,[Y=]y)

P, E 

Notes: P: 名称可以作为参数传递。E: 在运行时调用内部函数的外部代码。

有关内部函数(包括 Fortran 编译器可识别的 Fortran 77 内部函数)的更完整论述,请参见《Fortran 库参考》。

4.11 向前兼容性

以后的 f95 发行版在源代码上将与此发行版兼容。

不能保证此发行版的 f95 所生成的模块信息文件与以后的发行版兼容。

4.12 混合语言

可以将使用 C 编写的例程与 Fortran 程序结合使用 ,因为这些语言具有通用的调用约定。有关 C 和 Fortran 例程之间如何进行交互操作的详细信息,请参见《Fortran 编程指南》的“C/Fortran 接口”一章。