11

我了解 gfortran 可以编译 f90 或 f95 吗?它怎么知道它正在编译哪一个?它也可以编译f77代码吗?ubuntu 已经有 fortran 编译器还是我需要下载 gfortran?

4

2 回答 2

20

gfortran 可以从文件扩展名中猜出某些东西;如果文件具有 .f、.f90、f95、.f03 或 .f08 的扩展名,它将采用具有适当标准的固定 (.f) 或自由格式。但是您可以使用选项 -std=f2003 强制它编译(比如说)fortran2003 代码。例如,从文档中,

-std=std

指定程序应遵循的标准,可以是f95f2003f2008f2018gnu或之一legacystd的默认值是gnu,它指定了最新 Fortran 标准的超集,其中包括 GNU Fortran 支持的所有扩展,尽管对于不建议在新代码中使用的过时扩展会给出警告。该legacy值是等效的,但没有过时扩展的警告,并且可能对旧的非标准程序有用。f95, f2003,f2008和_f2018值分别指定严格遵守 Fortran 95、Fortran 2003、Fortran 2008 和 Fortran 2018 标准;超出相关语言标准的所有扩展都会出现错误,并且会为 Fortran 77 功能提供警告,这些功能在以后的标准中被允许但已过时。-std=f2008ts允许 Fortran 2008 标准,包括添加关于 Fortran 与 C 的进一步互操作性的技术规范 (TS) 29113 和关于 Fortran 中的附加并行功能的 TS 18508。

请注意,除了少数例外,fortran 标准是高度向后兼容的,因此许多“漂亮”、符合标准的 fortran-77 代码也是有效的 fortran 2003 代码。主要问题是 80 年代及更早的许多 fortran 代码既不“好”也不符合标准。

于 2012-06-04T16:10:38.780 回答
10

是的,gfortran 可以编译 FORTRAN 77 和 Fortran 90,95 等。它实现了 2003 和 2008 的许多功能。对于 Fortran 90/95/2003/2008 代码,一个很好的扩展名是 .f90。其他一些编译器无法识别 .f95、.f2003 等。当新标准出现时,您真的想重命名文件吗?FORTRAN 77 使用 .f 或 .for。主要区别在于编译器期望的源布局:.f90 为自由格式,.f 或 .for 为固定格式。(大写文件类型将导致预处理器运行。)您可以使用选项 -ffixed-form -ffixed-line-length-none 强制固定格式布局。

于 2012-06-04T17:45:38.090 回答