如何将 gfortran 用于带有 .for 文件扩展名的 Fortran 90?
How to use gfortran for Fortran 90 with .for file extension?
我在 Ubuntu (16.04) 安装 Gfortran 后指向 f95。我在 gfortran 手册中看到可以为 f95 及更高版本提供 -std 选项。我从手册中看到的默认 -std
选项值是 "gnu"。如果我将 f95 用于 f90 代码,我不确定编译内部的含义。
如何将 gfortran 用于扩展名为 .for 的 Fortran 90 文件?我不想将 Fortran 95 编译器用于 Fortran 90 代码,尽管 Fortran 95 可能能够(不确定)编译 Fortran 90。
f90
和 f95
之间的区别确实很小,但是扩展名 .for
或 .f
,gfortran 期望代码是固定形式的。
尝试向编译器添加 -ffree-form
选项。
也就是说,我建议为自由格式的 Fortran 代码使用文件扩展名 .f90
。这将使事情变得更容易 运行。
Fortran 90 已死。 Fortran 95 修复了它的严重缺陷,尤其是可分配项。例如,它允许存在未定义的分配状态。
很多时候有人说他使用的是 Fortran 90,但实际上他使用的是其他软件。
Fortran 90 和 Fortran 95 非常接近,甚至没有在编译器中启用 Fortran 90 的选项。它主要只会启用标准中的那些错误和疏忽,而只会禁用一些功能。
Gfortran,在默认模式下gnu
实际上接近于Fortran 2003 或2008 编译器。一些默认设置与 Fortran 90 和 95 不同。例如,分配时自动重新分配。但它通常适用于 Fortran 90 和 95 中的程序,甚至适用于 77 中的某些程序。它支持对标准的某些通用扩展。 Certsin 不太常见的扩展可以通过特殊标志启用。
没有理由担心。 Fortran 95 是人们应该关心的标准。 Fortran 90 不是。
关于 .for 扩展名,如果它符合固定格式源,编译器应该正确处理,无论是 77、90、95、2008 等等。
简而言之,常见的约定是:.f
或 .for
用于固定形式的源代码,.f90
用于自由形式的源代码,.F
, .F90
(在 UNIX/Linux 上)用于固定形式或自由形式的源代码,必须使用 Macros 以类似 C/C++ 的样式进行预处理,例如,#define BLAH_BLAH = 42
.
现在,虽然 "file extension" 的概念在 Windows 平台上无处不在,但 UNIX/Linux/Mac OS 等其他平台不附加文件名最后一位的任何特殊含义。事实上,Mac OS甚至不区分main.f
或MAIN.F
,它们实际上是等价的。
其次,与Java、C/C++、Python等不同,[=50=中没有文件作为源代码组织单元的概念].更具体地说,在 program
、subroutine
、function
或 (sub)module
之外不能有代码; ISO Fortran 标准本身没有定义任何扩展,它甚至没有规定使用磁盘上的文件来表示源代码。乍一看这似乎很奇怪,但这样做有充分的理由:操作系统可能使用某种数据库来存储所有信息,因此如果标准规定磁盘上的文件作为介质,它将排除这种(预命令 line/terminal) 系统。
一般来说,扩展 .f90
、.f95
、.f03
和 .f08
用于符合 Fortran 90 的现代自由格式源代码,分别是 Fortran 95、Fortran 2003 和 Fortran 2008 标准。对于较旧的固定格式代码,例如 FORTRAN 77,通常使用 .f
或 .for
扩展。
我强烈建议不要使用 .f95
、.f03
、.f08
文件扩展名(更不用说 .f15
)。这些扩展不仅不能被所有编译器识别,而且 Fortran 2008 代码仍然可以编写为固定格式的源代码;它仍然是该标准的一部分。
因此,请始终使用 *.f90
表示自由格式的源代码。
我在 Ubuntu (16.04) 安装 Gfortran 后指向 f95。我在 gfortran 手册中看到可以为 f95 及更高版本提供 -std 选项。我从手册中看到的默认 -std
选项值是 "gnu"。如果我将 f95 用于 f90 代码,我不确定编译内部的含义。
如何将 gfortran 用于扩展名为 .for 的 Fortran 90 文件?我不想将 Fortran 95 编译器用于 Fortran 90 代码,尽管 Fortran 95 可能能够(不确定)编译 Fortran 90。
f90
和 f95
之间的区别确实很小,但是扩展名 .for
或 .f
,gfortran 期望代码是固定形式的。
尝试向编译器添加 -ffree-form
选项。
也就是说,我建议为自由格式的 Fortran 代码使用文件扩展名 .f90
。这将使事情变得更容易 运行。
Fortran 90 已死。 Fortran 95 修复了它的严重缺陷,尤其是可分配项。例如,它允许存在未定义的分配状态。
很多时候有人说他使用的是 Fortran 90,但实际上他使用的是其他软件。
Fortran 90 和 Fortran 95 非常接近,甚至没有在编译器中启用 Fortran 90 的选项。它主要只会启用标准中的那些错误和疏忽,而只会禁用一些功能。
Gfortran,在默认模式下gnu
实际上接近于Fortran 2003 或2008 编译器。一些默认设置与 Fortran 90 和 95 不同。例如,分配时自动重新分配。但它通常适用于 Fortran 90 和 95 中的程序,甚至适用于 77 中的某些程序。它支持对标准的某些通用扩展。 Certsin 不太常见的扩展可以通过特殊标志启用。
没有理由担心。 Fortran 95 是人们应该关心的标准。 Fortran 90 不是。
关于 .for 扩展名,如果它符合固定格式源,编译器应该正确处理,无论是 77、90、95、2008 等等。
简而言之,常见的约定是:.f
或 .for
用于固定形式的源代码,.f90
用于自由形式的源代码,.F
, .F90
(在 UNIX/Linux 上)用于固定形式或自由形式的源代码,必须使用 Macros 以类似 C/C++ 的样式进行预处理,例如,#define BLAH_BLAH = 42
.
现在,虽然 "file extension" 的概念在 Windows 平台上无处不在,但 UNIX/Linux/Mac OS 等其他平台不附加文件名最后一位的任何特殊含义。事实上,Mac OS甚至不区分main.f
或MAIN.F
,它们实际上是等价的。
其次,与Java、C/C++、Python等不同,[=50=中没有文件作为源代码组织单元的概念].更具体地说,在 program
、subroutine
、function
或 (sub)module
之外不能有代码; ISO Fortran 标准本身没有定义任何扩展,它甚至没有规定使用磁盘上的文件来表示源代码。乍一看这似乎很奇怪,但这样做有充分的理由:操作系统可能使用某种数据库来存储所有信息,因此如果标准规定磁盘上的文件作为介质,它将排除这种(预命令 line/terminal) 系统。
一般来说,扩展 .f90
、.f95
、.f03
和 .f08
用于符合 Fortran 90 的现代自由格式源代码,分别是 Fortran 95、Fortran 2003 和 Fortran 2008 标准。对于较旧的固定格式代码,例如 FORTRAN 77,通常使用 .f
或 .for
扩展。
我强烈建议不要使用 .f95
、.f03
、.f08
文件扩展名(更不用说 .f15
)。这些扩展不仅不能被所有编译器识别,而且 Fortran 2008 代码仍然可以编写为固定格式的源代码;它仍然是该标准的一部分。
因此,请始终使用 *.f90
表示自由格式的源代码。