Suffisso corretto per il file sorgente di Fortran 2003: compilatore Intel Fortran

Ho scritto un piccolo snippet di codice, cercando di aderire allo standard Fortran 2003. Il codice è disponibile su github .

Questo è il mio 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 

Il codice viene compilato senza problemi utilizzando il makefile e il gfortran precedenti .

Tuttavia, se provo a compilarlo con iFort, usando solo

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

non funziona, vedi l’output qui sotto. Suppongo che questo abbia a che fare con il formato di file libero .f03. C’è una bandiera in iFort simile alla bandiera di gfortran -std = f2003? Ho provato a trovarlo nella Documentazione iFort, dovrei sembrare più difficile?

    inserisci la descrizione dell'immagine qui

    Non c’è nulla nello standard che specifica il suffisso dei file. Intel ha sempre affermato che tratta *.f90 come suffisso per il formato sorgente gratuito indipendentemente dalla versione standard. È solo una convenzione non basata su alcun documento standard.

    Forse il suffisso f90 è un po ‘sfortunato, sembra proprio per Fortran 90, ma non dovresti esitare a usarlo per ogni file sorgente in formato libero.

    Personalmente, non mi piace anche la pratica dei file .f95 , .f03 , .f08 . Devo rinominare il file sorgente solo perché chiamo alcuni intrinseco da uno standard più recente?

    È ansible specificare il modulo di origine utilizzato in un file sorgente utilizzando le opzioni della riga di comando -free e -fixed ifort, rispettivamente in forma libera e fissa.

    Come problema separato, puoi impostare lo standard per emettere la diagnostica contro l’utilizzo dell’opzione -stand [: xxx]. Questo non cambia il codice generato dal compilatore, cambia solo la diagnostica che il compilatore ha problemi. Questo è l’equivalente dell’opzione -std = xxx di gfortran.

    Come altro problema separato, è ansible specificare che il compilatore debba modificare il proprio comportamento in modo che corrisponda a quello specificato utilizzando lo standard Fortran usando l’opzione del compilatore semantica standard. Questo copre scenari in cui il comportamento del compilatore era storicamente diverso da quello che lo standard Fortran ha finito per richiedere o raccomandare.

    Come raccomandato nei commenti e nella risposta di Vladimir – l’opzione più semplice è usare semplicemente .f90 per qualsiasi file sorgente di forma libera (che sarà trattato come sorgente di forma libera da ifort in assenza dell’opzione della riga di comando fissata), indipendentemente dal standard a cui è stato scritto.