I've written a small snippet of code, trying to adhere to the Fortran 2003 standard. The code is available on github.
This is my 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
The code compiles without a problem using the above makefile and gfortran.
However, if I try to compile it with iFort, using just
ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03
it doesn't work, see the output below. I suppose that this has to do with the .f03 free file format. Is there a flag in iFort similar to gfortran's -std=f2003 flag? I tried to find this in the iFort Documentation, should I look harder?
There is nothing in the standard that specifies the suffix of the files. Intel always stated, that they treat *.f90
as the suffix for the free source format irrespective of the standard version. It is just a convention not based on any standard document.
Maybe the f90
suffix is little unfortunate, looking like just for Fortran 90, but you shouldn't hesitate to use it for every free-format source file.
Personally, I also do not like the practice of .f95
,.f03
, .f08
files. Should I rename the source file just because I call some intrinsic from a newer standard?
You can specify the source form used in a source file using the -free and -fixed ifort command line options, for free and fixed form respectively.
As a separate issue, you can set the standard to issue diagnostics against using the -stand[:xxx] option. This doesn't change the code generated by the compiler, it just changes the diagnostics that the compiler issues. This is the equivalent of gfortran's -std=xxx option.
As another separate issue, you can specify that the compiler should change its behaviour to match that specified using the Fortran standard using the -standard-semantics compiler option. This covers scenarios where the compiler's behaviour historically was different from what the Fortran standard has ended up requiring or recommending.
As recommended in the comments and Vladimir's answer - the easiest option is to just use .f90 for any free form source file (which will be treated as free form source by ifort in the absence of the -fixed command line option), regardless of the standard that it has been written to.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With