Oracle® Solaris Studio 12.4:Fortran 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

5.1 兼容的 f77 功能

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’ [-f77] 来关闭 SCRATCH 文件。在程序退出时,不会删除临时文件。在使用 -f77 进行编译时,也可以使用 FILE=name 来打开 SCRATCH 文件。

  • 允许对内部文件使用直接 I/O。[-f77]

  • f95 可识别 FORTRAN 77 格式编辑描述符 A$SU。 [-f77]

  • FORM=’PRINT’ 可以出现在 OPEN 语句中。 [-f77]

  • f95 可识别传统的 FORTRAN 输入/输出语句 ACCEPTTYPE

  • 使用 -f77=output 进行编译可写入 FORTRAN 77 样式的 NAMELIST 输出。

  • 在仅指定 ERR=(没有 IOSTAT=END= 分支)的情况下,当检测到 EOF 时,READERR= 分支作为 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 语句中用作逻辑单元时,星号 (*) 可用于表示 STDINSTDOUT

  • 数组可以出现在 FMT= 说明符中。[-f77=misc]

  • PRINT 语句接受名称列表组名称。[-f77=output]

  • 编译器接受 FORMAT 语句中多余的逗号。

  • 在执行 NAMELIST 输入时,如果输入问号 (?),则会以正在读取的名称列表组的名称响应。[-f77=input]

数据类型、声明和用法:

  • 在程序单元中,IMPLICIT 语句可以放在单元中任何其他声明语句的后面。

  • f95 接受 IMPLICIT UNDEFINED 语句。

  • f95 接受 AUTOMATIC 语句(FORTRAN 77 扩展)。

  • f95 接受 STATIC 语句,处理方式与 SAVE 语句一样。

  • f95 接受 VAX STRUCTUREUNIONMAP 语句。(请参见STRUCTURE 和 UNION (VAX Fortran)

  • LOGICALINTEGER 变量可以互换使用。[-f77=logical]

  • INTEGER 变量可以出现在条件表达式(如 DO WHILE)中。[-f77=logical]

  • Cray 指针可以出现在内部函数调用中。

  • f95 可接受在类型声明中使用斜杠的数据初始化。例如:REAL MHW/100.101/, ICOMX/32.223/

  • f95 允许将 Cray 字符指针赋值给非指针变量,以及其他非字符指针的 Cray 指针。

  • f95 允许将同一个 Cray 指针指向不同类型大小(例如,REAL*8INTEGER*4)的项。

  • 在将 Cray 指针声明为 POINTER 的同一程序单元中,可以将其声明为 INTEGERINTEGER 声明将被忽略。 [-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*8REAL*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 进行编译,可以使用非 INTEGERREAL 类型的参数来定义语句函数;实际参数将转换为语句函数所定义的类型。 [-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》。