我正在使用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是指定的逻辑单元。
有没有办法强制编译器使用指定的语言默认行为。或者,我可以修改代码以执行预期的默认行为吗?
答案 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功能),具有非常好的可视化调试和分析实用程序。但是,我建议您首先使代码可移植并符合标准。