跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:Fortran 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
f95 直接接受或在 -f77 兼容性模式下进行编译时接受旧版 FORTRAN 77 编译器 f77 的以下非标准功能:
源代码格式
续行可以在第一列中以 ’&’ 开头。[-f77=misc]
include 文件中的第一行可以是续行。[-f77=misc]
使用 f77 制表符格式。[-f77=tab]
制表符格式可以将源代码行扩展到第 72 列以后。[ -f77=tab]
如果字符串扩展到续行上,则 f95 制表符格式不会将字符串一直填充到第 72 列。[-f77]
I/O:
在 Fortran 95 中,可以使用 ACCESS='APPEND' 打开文件。
列表式输出使用与 f77 编译器类似的格式。[-f77=output]
f95 允许对直接访问文件使用 BACKSPACE,但不允许使用 ENDFILE。
f95 允许在格式编辑描述符中隐式指定字段宽度。例如,允许使用 FORMAT(I)。
f95 将以输出格式识别 f77 转义序列(例如,\n \t \’)。[-f77=backslash]。
f95 可识别 OPEN 语句中的 FILEOPT=。
f95 允许使用 STATUS='KEEP' 来关闭 SCRATCH 文件 [-f77]。在程序退出时,不会删除临时文件。在使用 -f77 进行编译时,也可以使用 FILE=name 来打开 SCRATCH 文件。
允许对内部文件使用直接 I/O。[-f77]
f95 可识别 FORTRAN 77 格式编辑描述符 A、$ 和 SU。[-f77]
FORM='PRINT' 可以出现在 OPEN 语句中。[-f77]
f95 可识别传统的 FORTRAN 输入/输出语句 ACCEPT 和 TYPE。
使用 -f77=output 进行编译可写入 FORTRAN 77 样式的 NAMELIST 输出。
在仅指定 ERR=(没有 IOSTAT= 或 END= 分支)的情况下,当检测到 EOF 时,READ 将 ERR= 分支作为 END= 处理。[-f77]
在 OPEN 语句中,接受 VMS Fortran NAME=’filename ’。[-f77]
f95 接受 READ() 或 WRITE() 后面的一个额外逗号。[-f77]
END= 分支可以出现在具有 REC= 的直接访问 READ 中。[-f77=input]
允许使用格式编辑描述符 Ew.d.e,并将其作为 Ew.d.Ee 处理。[-f77]
可以在输入语句的 FORMAT 中使用字符串。[-f77=input]
IOSTAT= 说明符可以出现在 ENCODE/DECODE 语句中。
在 ENCODE/DECODE 语句中允许使用列表式 I/O。
在 I/O 语句中用作逻辑单元时,星号 (*) 可用于表示 STDIN 和 STDOUT。
数组可以出现在 FMT= 说明符中。[-f77=misc]
PRINT 语句接受名称列表组名称。[-f77=output]
编译器接受 FORMAT 语句中多余的逗号。
在执行 NAMELIST 输入时,如果输入问号 (?),则会以正在读取的名称列表组的名称响应。[-f77=input]
数据类型、声明和用法:
在程序单元中,IMPLICIT 语句可以放在单元中任何其他声明语句的后面。
f95 接受 IMPLICIT UNDEFINED 语句。
f95 接受 AUTOMATIC 语句(FORTRAN 77 扩展)。
f95 接受 STATIC 语句,处理方式与 SAVE 语句一样。
f95 接受 VAX STRUCTURE、UNION 和 MAP 语句。(请参见4.4 STRUCTURE 和 UNION (VAX Fortran))
LOGICAL 和 INTEGER 变量可以互换使用。[-f77=logical]
INTEGER 变量可以出现在条件表达式(如 DO WHILE)中。[-f77=logical]
Cray 指针可以出现在内部函数调用中。
f95 可接受在类型声明中使用斜杠的数据初始化。例如: REAL MHW/100.101/, ICOMX/32.223/
f95 允许将 Cray 字符指针赋值给非指针变量,以及其他非字符指针的 Cray 指针。
f95 允许将同一个 Cray 指针指向不同类型大小(例如,REAL*8 和 INTEGER*4)的项。
在将 Cray 指针声明为 POINTER 的同一程序单元中,可以将其声明为 INTEGER。INTEGER 声明将被忽略。[-f77=misc]
Cray 指针可以用于除法和乘法运算。[-f77=misc]
ASSIGN 语句中的变量可以是 INTEGER*2 类型。[-f77=misc]
交替的 RETURN 语句中的表达式可以是非整型。[-f77=misc]
具有 SAVE 属性的变量可以与 COMMON 块的元素等效。
相同数组的初始化函数可以是不同的类型。示例: REAL*8 ARR(5) /12.3 1, 3, 5.D0, 9/
名称列表项的类型声明可以放在 NAMELIST 语句后面。
f95 接受 BYTE 数据类型。
f95 允许将非整数用作数组下标。[-f77=subscript]
f95 允许将关系运算符 .EQ. 和 .NE. 用于逻辑操作数。[-f77=logical]
f95 可接受传统的 f77 VIRTUAL 语句,并将它作为 DIMENSION 语句处理。
可以采用与 f77 编译器兼容的方式,对不同的数据结构进行等效处理。[-f77=misc]
与 f77 编译器类似,f95 允许在 PARAMETER 语句的初始化表达式中出现许多内部函数。
f95 允许将整数值赋值给 CHARACTER*1 变量。[-f77=misc]
BOZ 常量可用作指数。[-f77=misc]
可以将 BOZ 常量赋值给字符变量。例如: character*8 ch ch ="12345678"X
BOZ 常量可以用作内部函数调用的参数。[-f77=misc]
可以使用 DATA 语句中的整数值来初始化字符变量。变量中的第一个字符将被设置为该整数值,而字符串的其余部分将填充空白(如果字符串多于一个字符的话)。
可以将霍尔瑞斯字符的整数数组用作格式描述符。[-f77].
如果常量折叠产生浮点异常,则在编译时不进行常量折叠。[-f77=misc]
在使用 -f77=misc 进行编译时,f95 将以 f77 编译器的方式,将赋值、数据和参数语句中的 REAL 常量自动提升为适当的种类(REAL*8 或 REAL*16)。[-f77=misc]
在赋值 GOTO 中允许使用等价变量。[-f77]
可以将非常量字符表达式赋值给数值变量。
使用 -f77=misc 进行编译允许将 *kind 附加到类型声明中的变量名称之后。[-f77=misc]。例如,REAL Y*4, X*8(21)) INTEGER FUNCTION FOO*8(J)
字符子串可以作为隐含 DO 目标出现在 DATA 语句中。[-f77=misc] 例如: DATA (a(i:i), i=1,n) /n*’+’/
括号内的整数表达式可以作为类型大小出现。例如: PARAMETER (N=2) INTEGER*(N+2) K
程序、子例程、函数和可执行语句:
f95 不要求 PROGRAM 语句具有 name。
CALL 语句可以将函数当作子例程进行调用。[-f77]
对函数不一定要定义其返回值。[-f77]
交替返回说明符(*label 或 &label)可以出现在实际参数列表中,也可以出现在不同位置上。[-f77=misc]
%VAL 可用于类型为 COMPLEX 的参数。[-f77=misc]
可以使用 %REF 和 %LOC。[-f77=misc]
子例程可以递归调用其自身,而无需使用 RECURSIVE 关键字对自身进行声明。[-f77=misc] 但是,还应该使用 -xrecursive 标志对执行间接递归(例程 A 调用例程 B,而例程 B 又调用例程 A)的程序进行编译以使其正常工作。
即使当哑元参数列表中没有交替返回列表时,也可以调用具有交替返回的子例程。
如果使用 -f77=misc 进行编译,可以使用非 INTEGER 或 REAL 类型的参数来定义语句函数;实际参数将转换为语句函数所定义的类型。[-f77=misc]
允许使用空实际参数。例如:CALL FOO(I,,,J) 在第一个 I 和最后一个 J 参数之间使用了两个空参数。
f95 将函数 %LOC() 调用作为 LOC() 调用处理。[-f77=misc]
允许在其他运算符(如 ** 或 *)后面使用一元加号和一元减号。
即使第一个参数的类型是 COMPLEX,也允许 CMPLX() 内部函数使用第二个参数。在这种情况下,使用第一个参数的实部。[-f77=misc]
允许 CHAR() 内部函数的参数超过 255,并且只生成警告而不生成错误。[-f77=misc]
允许移位计数为负,并且只生成警告而不生成错误。
在当前目录中以及 -I 选项指定的目录中搜索 INCLUDE 文件。[-f77=misc]
允许进行连续的 .NOT. 运算,例如 .NOT..NOT..NOT.(I.EQ.J)。[-f77=misc]
其他
f95 通常不会将进度消息发送到标准输出。而 f77 编译器则发送进度消息,并显示它所编译的例程的名称。在使用 -f77 兼容性标志进行编译时,保留了这一约定。
f77 编译器编译的程序并不捕获运算异常,而是在退出时自动调用 ieee_retrospective 来报告在执行过程中可能发生的任何异常。如果使用 -f77 标志进行编译,可模拟 f77 编译器的这种行为。缺省情况下,f95 编译器捕获遇到的第一个运算异常,并且不调用 ieee_retrospective。
在需要更高精度的上下文中,f77 编译器处理 REAL*4 常量的方式就好像它具有更高的精度一样。 在使用 -f77 标志进行编译时,如果将 REAL*4 常量与双精度或四精度操作数一起使用,则 f95 编译器允许该常量相应地具有双精度或四精度。
允许在循环中重新定义 DO 循环变量。[-f77=misc]
显示所编译的程序单元的名称。[-f77=misc]
允许在 DIMENSION 语句之后声明 DIMENSION 语句中使用的变量类型。示例:
SUBROUTINE FOO(ARR,G) DIMENSION ARR(G) INTEGER G RETURN END
有关旧版 Sun WorkShop FORTRAN 77 编译器所接受的非标准语言扩展语法和语义的详细信息,请参见 http://docs.sun.com/source/806-3594/index.html 上归档的《FORTRAN 77 Language Reference》。