新版本的gfortran无法编译Fortran90代码。

3

我有一个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...

有什么提示吗?谢谢!


2
你必须展示你的代码。它很可能不符合Fortran标准。 - Vladimir F Героям слава
2
如果您在代码行中实际插入了空格,会发生什么?为什么您认为要求更严格地遵守Fortran 95标准会接受该代码? - steve
除了我的第一条评论之外,你还必须始终显示完整的错误输出。不仅仅是一行。我可以百分之百确定编译器引用了有问题的代码行。 - Vladimir F Героям слава
1个回答

2

源代码

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一样,一些版本会接受它,而后续版本则会拒绝它。在这种情况下,请明确告诉编译器将其作为固定格式源代码进行编译,或者更改源代码为有效的所谓交集格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接