如何区分Fortran标准-77、90或95?

15

我有一段Fortran代码,但不确定它是哪个标准 - '77、'90还是'95。是否有标准工具可以识别它遵循的标准?

3个回答

27

可能有自动化工具,但我的方法主要是启发式的:

  • 注释行上是否使用了 ! (F90+)或第一列是否使用了 C (F77)?
  • 循环是否使用了 do..end do (F90+)或 do..continue (F77)?
  • 行末是否使用了 & (F90+)或第6列(F77)来续行?
  • 代码是否使用了 moduletype 结构(F90)?
  • 如果代码使用数组,是否将其作为单个结构体操作(F90)或总是使用循环(F77)?
  • 是否使用动态内存(使用 allocatablepointer 方法)(F90)?

通常这些足以区分F90和F77。Fortran 90和FORTRAN 77之间的差异远远大于Fortran 90和Fortran 95之间的差异,因此我通常就止步于此。


2
几个要点区分了固定格式和自由格式,而不是 Fortran 77 和 Fortran 90。固定格式(在第一列中加上 C,在第6列中加上 & 等)即使在 Fortran 2008 中也是完全合法的。 - Vladimir F Героям слава

3
如果您可以访问GNU Fortran(gfortran),您可以尝试使用不同的--std选项进行编译,并查看哪个选项有效。您可以在这里找到有关方言选项的详细信息。

不是真的。-std=legacy 标志不能区分77和90。 - Foad S. Farimani

3

我正在添加Fortran 2003和2008的功能(这些只是我脑海中的想法)

如果程序具有参数化派生数据类型(Fortran 2003) 如果数组构造器使用方括号[]而不是(/ /)(Fortran 2003) 如果您看到,有使用共存数组的规定(Fortran 2008)

尽管许多编译器具有特殊函数(如Bessel函数)作为扩展的一部分,但它是Fortran 2008的正式功能。

(如果有任何差异,请告诉我,我会进行编辑)


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