OPEN的默认行为与STATUS =' NEW'

时间:2015-09-29 19:13:19

标签: fortran gfortran

我正在使用gfortran编译一个程序(我没写过)。 make文件指定f77作为编译器,但我没有。

我遇到了与OPEN命令相关的错误。

Error: The STATUS specified in OPEN statement at (1) is 'NEW' and no FILE specifier is present

我查看了Fortran 77 OPEN,根据Oracle语言参考,当' FILE = name'时,有一个默认行为。未指定。

http://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnaf/index.html

' NEW' - 文件不存在(存在是错误)。如果' FILE = name'没有指定,那么一个名为' fort.n'打开,其中n是指定的逻辑单元。

有没有办法强制编译器使用指定的语言默认行为。或者,我可以修改代码以执行预期的默认行为吗?

1 个答案:

答案 0 :(得分:5)

您引用的文档不是语言规范,它是对一个特定编译器的描述。有关文件fort.n的行为是特定于编译器的。有关实际标准文档,请参阅https://stackoverflow.com/tags/fortran/info

具体来说,Fortran 2008表示:

  

9.5.6.10 FILE = OPEN语句中的说明符

     

1 FILE =说明符的值是要连接到的文件的名称   指定单位。任何尾随空格都会被忽略。 file-name-expr   应该是处理器允许的名称。如果这个说明符是   省略并且单元未连接到文件STATUS =说明符   应指定值为SCRATCH;在这种情况下,   连接与处理器相关的文件。解释   案件依赖于处理器。

这意味着您的计划不符合规定,因为省略FILE=时,STATUS=的唯一允许值为"SCRATCH"

当您写入未打开的单元时,Gfortran也会创建fort.n文件,但在您使用open执行status="new"语句时则不会。您应该很容易将file=说明符添加到代码中。如果您坚持使用,您甚至可以使用fort.N名称。有关如何将整数写入文件名的方法,请参阅Convert integers to strings to create output filenames at run time

另一种选择是下载Oracle Solaris Studio,它包含f77命令,可能会遵循您引用的编译器特定文档。它实际上是一个非常好的编译器(如果缺少一些现代的Fortran功能),具有非常好的可视化调试和分析实用程序。但是,我建议您首先使代码可移植并符合标准。