2013-11-28 49 views
6

我写了一小段代码,尝试遵守Fortran 2003标准。代码是available on githubFortran 2003源文件的正确后缀 - 英特尔Fortran编译器

这是我的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 [email protected] $< $(FLGS) 

#build targets 

gnu-amd64-linux: $(OBJ) 
     $(FC) -o [email protected] $^ $(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'时,我遇到了一些编译器问题,消失了重命名文件后。 –

+0

@AlexanderVogt谢谢,我会尝试! – seb

+2

可能值得注意的是,一些针对Linux的编译器(包括ifort)默认将'.F90'扩展名解释为要传递给预处理器的文件。当然,仅仅使用大写扩展还是两者都是风格问题。 – sigma

回答

12

中没有任何一个指定的文件后缀的标准。英特尔总是表示,他们将*.f90视为免费源格式的后缀,而不考虑标准版本。这只是一个不基于任何标准文件的惯例。

也许f90后缀是一点不幸,看起来就像Fortran 90,但您应该毫不犹豫地将它用于每个自由格式的源文件。

就我个人而言,我也不喜欢.f95,.f03, .f08文件的做法。我应该重新命名源文件吗?仅仅是因为我从一个新标准中调用了一些内在的东西?

+0

如果没有标准和我不使用英特尔的fortran编译器,那么这是否重要?采用一种编译器的约定似乎值得怀疑,并将它们视为语言规范。 –

+0

为什么不使用'.f'后缀?请注意,当我这样做时,它需要我在每行前面都有7个空格,所以后缀似乎告诉编译器要打开哪些功能,这对'.f08'后缀来说是一个很好的参数。 –

+0

关键是所有编译器都支持.f90,为什么还要使用其他的东西? f90不是Fortran 90,它是免费的源代码格式。我希望人们现在不会使用f15文件... –

4

您可以分别使用-free和-fixed ifort命令行选项指定源文件中使用的源表单,分别为免费和固定格式。

作为一个单独的问题,您可以将标准设置为针对使用-stand [:xxx]选项发出诊断。这不会更改编译器生成的代码,它只会更改编译器发布的诊断信息。这相当于gfortran的-std = xxx选项。

作为另一个单独的问题,您可以指定编译器应该使用-standard-semantics编译器选项更改其行为以匹配使用Fortran标准指定的行为。这涵盖了编译器历史上的行为与Fortran标准要​​求或推荐的行为不同的情况。

正如评论和弗拉基米尔的回答中所建议的 - 最简单的选择是对任何自由格式的源文件使用.f90(在缺少固定命令行选项的情况下,它将被ifort视为自由格式源) ,而不管它已经写入的标准。

相关问题