Fortran 2003源文件的正确后缀 - 英特尔Fortran编译器

7
我已经写了一小段代码,试图遵循Fortran 2003标准。这段代码可以在github上找到
这是我的makefile:
FC = gfortran
FLGS = -g -pg -std=f2003 -I. -fbounds-check
DEPS = camx.prm
OBJ = unit-test-hadvppm.o hadvppm.o

#linker macro
%.o: %.f03 $(DEPS)
        $(FC) -c -o $@ $< $(FLGS)

#build targets

gnu-amd64-linux: $(OBJ)
        $(FC) -o $@ $^ $(FLGS)

clean: gnu-amd64-linux
        rm *.o

使用上述的 Makefile 和 gfortran,代码可以顺利编译。

然而,如果我尝试使用仅仅iFort编译它,会出现问题。

ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03

这段代码不能运行,下方是输出结果。我猜测这可能与.f03的自由文件格式有关。在iFort中是否有类似于gfortran的-std=f2003标志?我尝试在iFort文档中查找此标志,但需要更努力地寻找。

enter image description here


3
为什么不直接将文件重命名为 *.f90*.F90 呢?文件扩展名应该与编程语言标准无关。我主要使用Fortran 2003/2008,总是使用 *.F90 - 几年前使用 *.F03 时遇到了一些编译器问题,后来将文件重新命名后问题就解决了。 - Alexander Vogt
@AlexanderVogt 谢谢,我会尝试的! - seb
2
值得注意的是,包括ifort在内的Linux上的几个编译器默认将.F90扩展名解释为要传递给预处理器的文件。当然,只使用大写扩展名还是同时使用都是一种风格问题。 - sigma
2个回答

15

标准中没有规定文件后缀名。英特尔公司始终将 *.f90 视为自由源代码格式的后缀,不论标准版本如何。这只是一种基于惯例而非任何标准文档的约定。

也许 f90 后缀有点不太合适,看起来好像只适用于 Fortran 90,但您不应该犹豫地在每个自由格式源文件中使用它。

就个人而言,我也不喜欢 .f95.f03.f08 文件的做法。仅因为调用了新标准中的某些内置函数,我是否应该重命名源文件呢?


如果没有标准而且我没有使用英特尔的Fortran编译器,那么这会有影响吗?把一个编译器的惯例作为语言规范看待似乎是有问题的。 - Joshua Cheek
为什么不直接使用.f后缀呢?请注意,当我这样做时,它要求我在每行前面有7个空格,因此后缀告诉编译器要打开哪些功能,这是使用.f08后缀的一个很好的理由。 - Joshua Cheek
重点是所有编译器都支持.f90,为什么要使用其他东西?f90不是Fortran 90,它是自由源代码形式。我希望人们现在不会用f15文件了... - Vladimir F Героям слава
那么,我的编译器gfortran(gcc的一部分)对于.f90和.f08会有相同的行为吗? - Joshua Cheek
@JoshuaCheek .f 是固定源代码格式,.f90 是自由源代码格式。保持简单。是的,gfortran 支持许多后缀,但 f90 是事实上的标准。可移植性是 Fortran 在60年后仍然存在的原因。限制在一个编译器上直接违反了这一点。 - Vladimir F Героям слава
是的,@JoshuaCheek,你的编译器应该将.f90文件与.f08文件完全相同对待 - 所有自由格式源。.f文件是特殊的 - 如上所述,它们表示固定格式。 - Ross

5
您可以使用ifort命令行选项-free和-fixed来指定源文件中使用的源代码格式,分别用于自由格式和固定格式。
作为另一个问题,您可以使用-stand[:xxx]选项设置标准以进行诊断。这不会更改编译器生成的代码,只会更改编译器发出的诊断信息。这相当于gfortran的-std = xxx选项。
作为另一个单独的问题,您可以使用-standard-semantics编译器选项指定编译器应更改其行为,以使其与Fortran标准指定的行为相匹配。这涵盖了编译器历史上的行为与Fortran标准所要求或建议的行为不同的情况。
如评论和Vladimir的答案建议的那样 - 最简单的选项是对任何自由格式源文件使用.f90(如果没有-fixed命令行选项,则ifort将处理为自由格式源),而无论其编写的标准如何。

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