2012-06-04 13 views
8

Ich verstehe, gfortran kann f90 oder f95 kompilieren? Woher weiß es, welchen es kompiliert? Kann es auch F77-Code kompilieren? Hat Ubuntu bereits einen Fortran-Compiler oder muss ich Gfortran herunterladen?Wie kann Gfortran sagen, ob ich Code f90 oder F95 kompiliere?

+0

Siehe auch [Wie kann gfortran feststellen, ob ich f90 oder f95 code kompiliere?] (Https://stackoverflow.com/q/10884260/608639), [Makefile mit verschiedenen Quellentypen] (https: // stackoverflow. com/q/8940552/608639), [cmake, fortran 2008, und .f08 Dateierweiterung] (https://stackoverflow.com/q/25005017/608639), [Korrekten Suffix für Fortran 2003 Quelldatei - Intel Fortran Compiler] (https://stackoverflow.com/q/20269076/608639), usw. – jww

Antwort

18

gfortran kann bestimmte Dinge aus der Dateierweiterung erraten; Wenn die Datei eine Erweiterung von .f, .f90, f95, .f03 oder .f08 hat, wird sie ein festes (.f) oder freies Format mit den entsprechenden Standards annehmen. Aber Sie können es zwingen, (Fortran2003) Code mit der Option -std = f2003 zu kompilieren. ZB aus dem documentation,

-std = std

den Standard angeben, auf die das Programm erwartet wird, entsprechen, die eine der `f95' sein kann,` F2003' , `F2008' , `Gnu 'oder` Vermächtnis'. Der Standardwert für Std ist `gnu ', der eine Obermenge des Fortran 95-Standards angibt, die alle von GNU Fortran unterstützten Erweiterungen enthält, obwohl Warnungen für veraltete Erweiterungen , die für die Verwendung in neuem Code nicht empfohlen werden, angegeben werden. Der "Legacy" -Wert ist äquivalent , aber ohne die Warnungen für veraltete Erweiterungen, und kann nützlich sein für alte Nicht-Standard-Programme. Die "f95", "f2003" und "f2008" Werte spezifizieren strenge Übereinstimmung mit den Fortran 95, Fortran 2003 bzw. Fortran 2008 Standards; Fehler sind für alle Erweiterungen über den relevanten Sprachstandard gegeben, und Warnungen sind für die Fortran 77 Funktionen gegeben, die in späteren Standards zulässig, aber veraltet sind. `-std = f2008ts' ermöglicht es der Fortran 2008 Standard die Ergänzungen der Technischen Spezifikation (TS) 29113 über die weitere Interoperabilität von Fortran mit C.

anzumerken, dass mit wenigen Ausnahmen, darunter die Fortran-Standards hochgradig abwärtskompatibel, so dass viel "netter", standardkonformer Fortran-77-Code auch für Fortran 2003-Code gilt. Das Hauptproblem dabei ist, dass viel Fortran-Code aus den 80er Jahren und früher weder "nett" noch standardkonform ist.

+1

Kann Gfortran davon überzeugt werden, dass eine .f-Datei Fortran 95 oder höher ist? '-std = f95' ist nicht ausreichend. – hertzsprung

+1

@hertzsprung 'gcc-x f95 file.f' kann funktionieren –

10

Ja, gfortran kann FORTRAN 77 und Fortran 90,95 usw. kompilieren. Es hat viele Funktionen von 2003 & 2008 implementiert. Für Fortran 90/95/2003/2008 Code eine gute Erweiterung zu verwenden ist .f90. Einige andere Compiler erkennen .f95, .f2003 usw. nicht. Und wollen Sie wirklich Ihre Dateien umbenennen, wenn ein neuer Standard herauskommt? Verwenden Sie .f oder .for für FORTRAN 77. Der Hauptunterschied ist das Quelllayout, das der Compiler erwartet: freie Form für .f90, feste Form für .f oder .for. (Großflächige Dateitypen bewirken, dass der Präprozessor ausgeführt wird.) Sie können das Layout in fester Form mit den Optionen -fixed-form -fixed-line-length-none erzwingen.