较新的 gfortran 不编译 Fortran90 代码

Newer gfortran does not compile a Fortran90 code

我有一个 Fortran90 代码,可以编译并与 gfortran 4.8.5 一起工作。然而,当我尝试用较新的 gfortran 版本编译它时(我已经从 6.3 测试到 11.2),它不起作用!!

如果我不向 gfortran-6.3+ 添加任何标志,我会得到 Error: Blank required in STOP statement near (1)

如果我添加 -std=f95,那么我会得到 Error: GNU Extension: Nonstandard type declaration Error: Fortran 2003: Elemental function as initialization expression with non-integer/non-character arguments...

有什么建议吗?谢谢!

来源

stop1
end

不是有效的 Fortran 90/95/2003/2008/2018 程序。

然而,这是一个被 GCC 4.8.5 接受的程序,似乎达到了预期的结果。

它被这个版本的编译器接受,因为它没有拒绝程序的诊断能力。 GCC 的更高版本确实包含此类功能。

不需要编译器具备此功能:此源代码中的错误是程序员必须承担的责任。通过使用更新的编译器,您可以利用其可选错误检查重点的改进。人们应该感谢一个编译器,即使在不必要的情况下也能指出错误。

如果您像我这里的示例一样损坏了代码:修复它。对更高版本的 GCC 使用标志 -std=f95 不会有帮助:该标志要求检查是否更严格地符合 Fortran 95 标准(反对允许 non-standard 来自 Fortran 2003+ 的扩展或功能)但如上所述,该代码不是有效的 Fortran 95 代码。


但是请注意,

      stop1
      end

是 fixed-form 源中的有效 Fortran 90+ 程序。如果您尝试将 fixed-form 源代码编译为 free-form 源代码,那么如上所述,早期版本的 GCC 将接受它,而更高版本将拒绝它。在这种情况下,明确告诉编译器编译为 fixed-form 源代码或将源代码更改为有效的 so-called 交集格式。