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?