我正在使用gfortran编译一个程序(我没有写过)。生成文件将f77指定为编译器,但我没有此文件。
我遇到了与OPEN命令有关的错误。
Error: The STATUS specified in OPEN statement at (1) is 'NEW' and no FILE specifier is present
Run Code Online (Sandbox Code Playgroud)
我查看了Fortran 77 OPEN,根据Oracle语言参考,未指定'FILE = name'时有默认行为。
http://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnaf/index.html
'NEW'-文件不存在(存在是错误)。如果未指定'FILE = name',则打开名为'fort.n'的文件,其中n是指定的逻辑单元。
有没有一种方法可以强制编译器使用指定的默认行为的语言。另外,我可以修改代码以执行预期的默认行为吗?
您引用的文档不是语言规范,而是对一个特定编译器的描述。有关文件的行为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=is "SCRATCH"。
fort.n当您写入未打开的单元时,但当使用来执行open语句时,Gfortran也会创建文件status="new"。将说明file=符添加到代码中应该很容易。fort.N如果您坚持使用名称,甚至可以使用它们。有关如何将整数转换为文件名的方法,请参见在运行时将整数转换为字符串以创建输出文件名。
另一个选择是下载Oracle Solaris Studio,它包含f77命令,并且可能遵循您引用的编译器特定文档。它实际上是一个很好的编译器(如果缺少一些现代的Fortran功能),并且具有很好的视觉调试和性能分析实用程序。但是,我建议您首先使代码可移植且符合标准。