Fortran
Programmeinheiten und Dateilayout
Suche…
Fortran-Programme
Ein komplettes Fortran-Programm besteht aus einer Reihe unterschiedlicher Programmeinheiten. Programmeinheiten sind:
- Hauptprogramm
- Funktion oder Unterprogramm Unterprogramm
- Modul oder Submodul
- Blockdatenprogrammeinheit
Das Hauptprogramm und einige Unterprogramme für Prozeduren (Funktionen oder Unterprogramme) können in einer anderen Sprache als Fortran bereitgestellt werden. Zum Beispiel kann ein C-Hauptprogramm eine durch ein Fortran-Funktionsunterprogramm definierte Funktion aufrufen, oder ein Fortran-Hauptprogramm kann eine durch C definierte Prozedur aufrufen.
Diese Fortran-Programmeinheiten können verschiedene Dateien oder eine einzige Datei sein.
Zum Beispiel können wir die zwei Dateien sehen:
prog.90
program main
use mod
end program main
mod.F90
module mod
end module mod
Und der Compiler (korrekt aufgerufen) kann das Hauptprogramm mit dem Modul verknüpfen.
Die einzelne Datei kann viele Programmeinheiten enthalten
alles.F90
module mod
end module mod
program prog
use mod
end program prog
function f()
end function f()
In diesem Fall muss jedoch beachtet werden, dass die Funktion f
weiterhin eine externe Funktion ist , was das Hauptprogramm und das Modul betrifft. Das Modul ist jedoch für das Hauptprogramm zugänglich.
Die Regeln für den Eingabebereich gelten für jede einzelne Programmeinheit und nicht für die Datei, in der sie enthalten sind. Wenn zum Beispiel jede Bereichseinheit keine implizite Typisierung haben soll, muss die obige Datei als geschrieben werden
module mod
implicit none
end module mod
program prog
use mod
implicit none
end program prog
function f()
implicit none
<type> f
end function f
Module und Submodule
Module sind an anderer Stelle dokumentiert .
Compiler erzeugen häufig sogenannte Moduldateien : normalerweise die Datei, die sie enthält
module my_module
end module
führt dazu, dass der Compiler eine Datei namens my_module.mod
. In einem solchen Fall muss die Moduldatei sichtbar sein, damit ein Modul für eine Programmeinheit zugänglich ist, bevor diese Programmeinheit verarbeitet wird.
Externe Verfahren
Eine externe Prozedur ist eine Prozedur, die außerhalb einer anderen Programmeinheit oder auf andere Weise als Fortran definiert ist.
Die Funktion ist in einer Datei enthalten
integer function f()
implicit none
end function f
ist eine externe Funktion.
Für externe Prozeduren kann ihre Existenz unter Verwendung eines Schnittstellenblocks (zur Angabe einer expliziten Schnittstelle) deklariert werden.
program prog
implicit none
interface
integer function f()
end interface
end program prog
oder durch eine Deklaration, um eine implizite Schnittstelle anzugeben
program prog
implicit none
integer, external :: f
end program prog
oder auch
program prog
implicit none
integer f
external f
end program prog
Das external
Attribut ist nicht erforderlich:
program prog
implicit none
integer i
integer f
i = f() ! f is now an external function
end program prog
Blockieren Sie Datenprogrammeinheiten
Blockdaten-Programmeinheiten sind Programmeinheiten, die Anfangswerte für Objekte in gemeinsamen Blöcken bereitstellen. Diese sind hier bewusst nicht dokumentiert und werden in der Dokumentation historischer Fortran-Funktionen enthalten sein.
Interne Unterprogramme
Eine Programmeinheit, die kein internes Unterprogramm ist, kann andere Programmeinheiten enthalten, die als interne Unterprogramme bezeichnet werden .
program prog
implicit none
contains
function f()
end function f
subroutine g()
end subroutine g
end program
Ein solches internes Unterprogramm hat eine Reihe von Funktionen:
- Es gibt eine Host-Zuordnung zwischen Entitäten im Unterprogramm und dem äußeren Programm
- implizite Typisierungsregeln werden vererbt (
implicit none
ist inf
obenf
) - Interne Unterprogramme verfügen über eine explizite Schnittstelle im Host
Modul-Unterprogramme und externe Unterprogramme können interne Unterprogramme haben, wie z
module mod
implicit none
contains
function f()
contains
subroutine s()
end subroutine s
end function f
end module mod
Quellcodedateien
Eine Quellcodedatei ist eine (in der Regel) Klartextdatei, die vom Compiler verarbeitet werden soll. Eine Quellcodedatei kann bis zu ein Hauptprogramm sowie eine beliebige Anzahl von Modulen und externen Unterprogrammen enthalten. Eine Quellcodedatei kann beispielsweise Folgendes enthalten
module mod1
end module mod1
module mod2
end module mod2
function func1() ! An external function
end function func1
subroutine sub1() ! An external subroutine
end subroutine sub1
program prog ! The main program starts here...
end program prog ! ... and ends here
function func2() ! An external function
end function func2
An dieser Stelle sei daran erinnert, dass die externen Unterprogramme zwar in derselben Datei wie die Module und im Hauptprogramm enthalten sind, die externen Unterprogramme jedoch keiner anderen Komponente explizit bekannt sind.
Alternativ können die einzelnen Komponenten auf mehrere Dateien verteilt und sogar zu verschiedenen Zeiten kompiliert werden. In der Compiler-Dokumentation sollte beschrieben werden, wie Sie mehrere Dateien in einem einzigen Programm kombinieren.
Eine einzelne Quellcodedatei kann entweder Quellcode in festem oder freiem Format enthalten: Sie können nicht gemischt werden, obwohl mehrere Dateien, die zur Kompilierzeit kombiniert werden, unterschiedliche Stile aufweisen können.
Um dem Compiler das Quellformular anzugeben, gibt es im Allgemeinen zwei Optionen:
- Wahl des Dateinamensuffixes
- Verwendung von Compilerflags
Das Flag für die Kompilierungszeit zur Angabe einer Quelle mit festem oder freiem Format finden Sie in der Dokumentation des Compilers.
Die signifikanten Dateinamensuffixe befinden sich auch in der Dokumentation des Compilers. In der Regel enthält eine Datei mit dem Namen file.f90
eine Freiformquelle, während die Datei file.f
eine Quelle mit festem Format enthält.
Die Verwendung des .f90
Suffixes zur Angabe der Freiform-Quelle (die im Fortran 90-Standard eingeführt wurde) veranlasst den Programmierer häufig, das Suffix zu verwenden, um den Sprachstandard anzugeben, dem der Quellcode entspricht. Beispielsweise sehen wir möglicherweise Dateien mit den Suffixen .f03
oder .f08
. Dies sollte generell vermieden werden: Die meisten Quellen von Fortran 2003 entsprechen auch Fortran 77, Fortran 90/5 und Fortran 2008. Außerdem berücksichtigen viele Comiler solche Suffixe nicht automatisch.
Compiler bieten häufig auch einen eingebauten Code-Preprozessor (in der Regel auf Basis von CPP). Wiederum kann ein Flag zur Kompilierungszeit verwendet werden, um anzuzeigen, dass der Präprozessor vor der Kompilierung ausgeführt werden soll, das Suffix der Quellcodedatei kann jedoch auch eine solche Vorverarbeitungsanforderung anzeigen.
Bei Dateisystemen, bei denen die Groß- und Kleinschreibung file.F
wird die Datei file.F
häufig als eine zu verarbeitende file.F90
mit festem Format und file.F90
als eine zu verarbeitende file.F90
mit freiem Format verstanden. Nach wie vor sollte die Dokumentation des Compilers nach solchen Flags und Dateisuffixen durchsucht werden.