fortran - 较新的 gfortran 不编译 Fortran90 代码

标签 fortran gfortran fortran90

我有一个 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使用非整数/非字符参数...

有什么建议吗?谢谢!

最佳答案

来源

stop1
end

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

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

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

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

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


但是请注意

      stop1
      end

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

关于fortran - 较新的 gfortran 不编译 Fortran90 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72092362/

相关文章:

c++ - 使用 g++/intel C++ 编译器调用 fortran 函数

fortran - GAMMA 的结果低于同类

c++ - 从 Fortran 调用 C 函数,其中 C 函数名称最初是从 C 传入的

fortran - 如何在敏感模式下在 gfortran 中编译?

fortran - Fortran 90 和 Fortran 95 之间的区别

fortran - Fortran 90中的堆栈溢出

Fortran 95 : super large numbers for prime test

fortran - gfortran 提示可分配组件的结构构造函数中的元素等级

fortran - 使用 GNU gfortran 将宏字符串化

fortran - 简单读取函数错误