gfortran如何判断我是否在编译f90或f95代码?

12

我了解gfortran可以编译f90或f95?它如何知道正在编译哪个版本?它能编译f77代码吗?Ubuntu是否已经有Fortran编译器,还是我需要下载gfortran?


2个回答

22

gfortran可以根据文件扩展名猜测一些内容;如果文件的扩展名为.f、.f90、f95、.f03或.f08,它将假定采用固定(.f)或自由格式,并符合相应的标准。但是您可以通过选项-std=f2003强制编译Fortran 2003代码。例如,从文档中获得信息,

-std=std

指定程序期望符合的标准,可以是f95f2003f2008f2018gnulegacy之一。默认值为 std 为 gnu ,它指定了包含GNU Fortran支持的所有扩展的最新Fortran标准的超集,尽管会对不推荐在新代码中使用的过时扩展给出警告。 legacy 值等效,但没有过时扩展的警告,可能对旧的非标准程序有用。 f95 、 f2003 、 f2008 和 f2018 值分别指定严格符合Fortran 95、Fortran 2003、Fortran 2008和Fortran 2018标准;所有超出相关语言标准的扩展都会导致错误,并为允许但在后期标准中过时的Fortran 77特性提供警告。 -std = f2008ts 允许包括技术规范(TS)29113的Fortran 2008标准,该规范进一步提高了Fortran与C的互操作性以及TS 18508中提供的Fortran的其他并行功能。

请注意,除了一些例外情况,Fortran 标准是高度向后兼容的,所以很多“好”的、符合标准的 Fortran-77 代码也是有效的 Fortran 2003 代码。问题在于,很多 80 年代及之前的 Fortran 代码既不“好”,也不符合标准。


2
gfortran能否被说服将.f文件视为Fortran 95或更高版本?-std=f95是不够的。 - hertzsprung

10

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


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