Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction Fortran 2003源文件的正确后缀-英特尔Fortran编译器_Compiler Construction_Fortran_Intel Fortran - Fatal编程技术网

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

Compiler construction Fortran 2003源文件的正确后缀-英特尔Fortran编译器,compiler-construction,fortran,intel-fortran,Compiler Construction,Fortran,Intel Fortran,我编写了一小段代码,试图遵守Fortran 2003标准。代码是 这是我的生成文件: 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

我编写了一小段代码,试图遵守Fortran 2003标准。代码是

这是我的生成文件:

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
它不工作,请参见下面的输出。我想这与.f03自由文件格式有关。iFort中是否有类似于gfortran的-std=f2003标志的标志?我试图在iFort文档中找到这一点,我应该更仔细看看吗


标准中没有规定文件的后缀。英特尔一直声明,无论标准版本如何,他们都将
*.f90
作为自由源代码格式的后缀。这只是一项公约,不是以任何标准文件为基础的

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


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

您可以使用-free和-fixed ifort命令行选项分别为free和fixed form指定源文件中使用的源格式

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

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


正如评论和Vladimir的回答中所建议的,最简单的选择是对任何自由格式的源文件使用.f90(如果没有-fixed命令行选项,ifort会将其视为自由格式源文件),无论写入的标准是什么。

为什么不简单地将文件重命名为
*.f90
*.f90
?文件结尾应独立于标准;-)我主要使用Fortran 2003/2008编写代码,并且总是使用
*.F90
-几年前,我在使用
*.F03
时遇到一些编译器问题,这些问题在重命名文件后消失了。@AlexanderVogt谢谢,我会尝试的!可能值得注意的是,一些Linux编译器(包括ifort)默认情况下将
.F90
扩展解释为要传递给预处理器的文件。当然,是否只使用大写扩展名还是同时使用大写扩展名是风格的问题。另请参见、、等。如果没有标准,并且我没有使用intel的fortran编译器,那么这有关系吗?把一个编译器的约定当作语言规范来对待似乎有问题。为什么不直接使用
.f
后缀呢?请注意,当我这样做时,要求每行前面有7个空格,因此后缀似乎告诉编译器要打开哪些功能,这是
.f08
后缀的一个很好的参数。关键是所有编译器都支持.f90,为什么还要使用其他任何东西?f90不是Fortran 90,它是自由源代码形式。我希望人们现在不要带f15文件来……因此,我的编译器gfortran(gcc的一部分)对
.f90
.f08
?@joshuacheck.f是固定源代码形式,.f90是自由源代码形式。保持简单。是的,gfortran支持许多后缀,但f90实际上是标准的。可移植性是Fortran在60年后仍然存在的原因。固定到一个编译器是直接反对的。
ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03