2013-11-28 18 views
6

Ich habe einen kleinen Codeschnipsel geschrieben, der versucht, den Fortran 2003 Standard einzuhalten. Der Code lautet available on github.Korrektes Suffix für Fortran 2003 Quelldatei - Intel Fortran Compiler

Das ist mein Make-Datei:

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 

Der Code kompiliert, ohne ein Problem der oben Make-Datei und gfortran mit.

Allerdings, wenn ich versuche, es mit ifort zu kompilieren, mit nur

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

es nicht funktioniert, finden Sie in der unten ausgegeben. Ich nehme an, dass dies mit dem freien Dateiformat .f03 zu tun hat. Gibt es eine Flagge in iFort, die der gfortran's -std = f2003 Flagge ähnlich ist? Ich habe versucht, dies in der iFort-Dokumentation zu finden, sollte ich genauer hinschauen?

enter image description here

+3

Warum benennen Sie Ihre Dateien nicht einfach in '* .f90' oder' * .F90' um? Die Dateiendung sollte unabhängig vom Standard sein ;-) Ich habe meistens in Fortran 2003/2008 programmiert und * immer * benutze '* .F90' - Ich hatte Probleme mit einigen Compilern, wenn ich' * .F03' 'vor ein paar Jahren verwendete, die verschwanden nach dem Umbenennen der Dateien. –

+0

@AlexanderVogt Danke, ich werde das versuchen! – seb

+2

Es ist erwähnenswert, dass mehrere Compiler für Linux (einschließlich ifort) die Erweiterung '.F90' standardmäßig als Dateien interpretieren, die an einen Präprozessor übergeben werden sollen. Natürlich ist es eine Frage des Stils, ob nur die Großbuchstaben-Erweiterung oder beides verwendet werden soll. – sigma

Antwort

12

Es gibt nichts in der Norm, die das Suffix der Dateien angibt. Intel hat immer gesagt, dass sie *.f90 als Suffix für das freie Quellformat unabhängig von der Standardversion behandeln. Es ist nur eine Konvention, die nicht auf einem Standarddokument basiert.

Vielleicht ist das f90 Suffix etwas unglücklich, sieht aus wie nur für Fortran 90, aber Sie sollten nicht zögern, es für jede Freiformat-Quelldatei zu verwenden.

Persönlich mag ich auch nicht die Praxis von .f95, .f03, .f08 Dateien. Sollte ich die Quelldatei nur umbenennen, weil ich etwas intrinsisch von einem neueren Standard anrufe?

+0

Wenn es keinen Standard gibt und Ich verwende nicht den Fortran-Compiler von Intel, dann ist das wichtig? Es erscheint fragwürdig, die Konventionen eines Compilers zu nehmen und sie als Sprachspezifikation zu behandeln. –

+0

Warum nicht einfach '.f' Suffix verwenden? Beachten Sie, dass, wenn ich dies tue, ich 7 Leerzeichen vor jeder Zeile haben muss, also scheinen die Suffixe dem Compiler zu sagen, welche Features eingeschaltet werden sollen, was ein ziemlich gutes Argument für das Suffix ".f08" ist. –

+0

Der Punkt ist, dass alle Compiler .f90 unterstützen, warum sonst noch etwas? f90 ist kein Fortran 90, es ist eine freie Quellform. Ich hoffe, die Leute werden jetzt nicht mit f15 Dateien kommen ... –

4

Sie können das Quellformular, das in einer Quelldatei verwendet wird, mit den Befehlszeilenoptionen -free und -fixed ifort für freies bzw. festes Formular angeben.

Als separates Problem können Sie den Standard festlegen, um die Verwendung der Option -stand [: xxx] zu diagnostizieren. Dies ändert den vom Compiler generierten Code nicht, er ändert nur die Diagnose, die der Compiler ausgibt. Dies entspricht der Option gfortran -std = xxx.

Als weiteres separates Problem können Sie angeben, dass der Compiler das Verhalten so ändern soll, dass er mit dem Fortran-Standard unter Verwendung der Compileroption -standard-semantics übereinstimmt. Dies deckt Szenarien ab, in denen sich das Verhalten des Compilers historisch von dem unterscheidet, was der Fortran-Standard erfordert oder empfohlen hat.

Wie in den Kommentaren und Wladimirs Antwort empfohlen - die einfachste Option ist, einfach .f90 für jede freie Form-Quelldatei zu verwenden (die von ifort in Abwesenheit der -fixierten Befehlszeilenoption als freie Formquelle behandelt wird) , unabhängig vom Standard, in den es geschrieben wurde.