Fortran: Fortran 2003: Datentypen
<<< zur Fortran-Startseite | |
<< Fortran 2003 | Bibliotheken >> |
< Programmaufbau | Zeiger > |
Intrinsische Datentypen
[Bearbeiten]Die aus Fortran 90/95 bekannten intrinsischen Datentypen sind weiterhin uneingeschränkt gültig.
Datentyp | Kommentar |
---|---|
integer | Ganzzahlen |
real | Reelle Zahlen einfacher Genauigkeit |
(double precision) | Reelle Zahlen doppelter Genauigkeit |
complex | Komplexe Zahlen |
logical | Logischer Datentyp (.true., .false.) |
character | Zeichen(kette) |
Im Umfeld des character
-Datentyps gab es einige Ergänzungen:
- Unterstützung internationaler Zeichensätze in Rahmen der ISO 10646-Norm (Universal Coded Character Set). Im Kapitel iso_fortran_env ist ein kleines Beispiel zu diesem Thema zu finden.
- Die Funktion
selected_char_kind
ist neu. Ihre Funktionsweise ist äquivalent zu den bereits aus Fortran 90/95 bekannten Funktionenselected_int_kind
undselected_real_kind
. - Zeichenkette (String) mit variabler Länge von Zeichen:
character(:), allocatable
Ein Beispiel mit einem String variabler Länge:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none character(:), allocatable :: str str = "Hallo" print *, str print *, "Laenge = ", len(str), " Zeichen" ! Ausgabe: ! Hallo ! Laenge = 5 Zeichen str = "Hallo, Welt" print *, str print *, "Laenge = ", len(str), " Zeichen" ! Ausgabe: ! Hallo, Welt ! Laenge = 11 Zeichen end program bsp |
Ab Fortran 2008 kann auf den Real- und Imaginärteil von komplexen Zahlen mittels %-Datenverbund-Zeichen zugegriffen werden:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none complex img img%re = 1.5 img%im = img%re + 2.5 print *, img ! Ausgabe ! (1.50000000,4.00000000) end program bsp |
Enumeration
[Bearbeiten]Mit Fortran 2003 sind auch in dieser Programmiersprache Enumerationen (Aufzählungstypen) möglich. Die Werte in einer solchen Enumeration besitzen einen integer
-Datentyp.
enum, bind( C ) enumerator :: wert(e) // ... end enum |
Die von C-Enumerationen bekannten Eigenschaften gelten gleichermaßen für Fortran-Enumerationen, z.B.:
- ohne explizite Zuweisung von Werten wird mit dem Wert 0 gestartet.
- ohne explizite Zuweisung von Werten wird in der Anordnungsreihenfolge der Elemente sukzessiv immer um 1 hochgezählt.
- Wurde dem Vorgängerelement eine Ganzzahl zugewiesen, dem Element jedoch nicht, so ist der Wert dieses Elementes die dem Vorgängerelement zugeordnete Ganzzahl + 1.
Beispiel:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none integer :: wert enum, bind( C ) enumerator :: MON, DIE, MIT = 3, DON, FRE = 5, SAM = 66, SON = 77 end enum write( *, * ) MON write( *, * ) MIT write( *, * ) SAM wert = 4 if( wert == MIT + 1 ) then write( *, * ) "Donnerstag" endif ! Ausgabe: ! 0 ! 3 ! 66 ! Donnerstag end program bsp |
Obwohl der Fortran 2003-Working Draft J3/04-007 durch das bind(c)
eine zwingende Anbindung an einen Aufzählungstyp in der Programmiersprache C vorgaukelt, ist dies nicht der Fall. Fortran-Enumerationen funktionierten auch ohne entsprechendes C-Gegenstück. Sie werden im Fortran 2003-Working Draft auch nicht im Abschnitt Interoperability with C geführt, sondern direkt im Abschnitt über die Fortran-Datentypen. Diese Tatsache dürften die Compilerbauer auch unterschiedlich interpretieren. So wäre beim g95-Compiler das Attribut bind(C)
nicht unbedingt erforderlich, ist jedoch möglich. Beim Einsatz des gfortran ist der Zusatz bind(C)
obligatorisch. Aus Kompatibilitätsgründen ist somit immer die strikte Schreibweise nach Fortran 2003-Standard empfehlenswert. Der Intel Fortran Compiler 9.1 unterstützt dieses Sprachmerkmal ohnehin noch nicht.
Derived Type
[Bearbeiten]Der Derived Type wurde in Fortran 2003 wesentlich erweitert. Er ist nun kein reiner Datenverbund wie noch in Fortran 90/95, sondern eine richtige Klasse. Genauer beschrieben wird dieser Typ später im Kapitel zur OOP, hier zunächst nur einige einfache Erweiterungsmerkmale gegenüber Fortran 90/95.
Benannte Parameter
[Bearbeiten]Beispiel:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none type test integer :: i character( 20) :: str end type type( test ) :: t1 = test ( i = 1, str = "Wiesenfeld" ) write( *, *) t1 ! Ausgabe: ! 1 Wiesenfeld end program bsp |
Die Verwendung von benannten Parametern bei der Konstruktion einer Derived Type-Variable kann vor allem in Verbindung mit Vorgabewerten sinnvoll sein.
Vorgabewerte
[Bearbeiten]Ab Fortran 2003 dürfen Variablen in einem Derived Type auch mit Vorgabewerten (default values) belegt werden.
Beispiel:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none type test integer :: i = -1 character( 20) :: str = "NN" end type type( test ) :: t1 = test () type( test ) :: t2 = test ( str = "Wiesenfeld" ) type( test ) :: t3 = test ( str = "Walddorf", i = 1 ) write( *, *) t1 write( *, *) t2 write( *, *) t3 ! Ausgabe: ! -1 NN ! -1 Wiesenfeld ! 1 Walddorf end program bsp |
Felder
[Bearbeiten]Ein mehrdimensionales Feld kann ab Fortran 2008 maximal 15-dimensional gestaltet werden.
Ein benanntes konstantes Feld kann wie folgt initialisiert werden. Die obere Feldgrenze wird durch den Stern (*) ersetzt. Durch den array constructor wird die Feldgröße automatisch festgelegt:
Fortran 2003 (oder neuer)-Code |
program bsp implicit none integer, parameter, dimension(1:*) :: arr1 = [1, 2, 3, 4, 5] integer, parameter :: arr2(0:*) = [0, 1, 2] print *, arr1 print *, arr1(2) print *, arr2 print *, arr2(2) ! Ausgabe: ! 1 2 3 4 5 ! 2 ! 0 1 2 ! 2 end program bsp |
<<< zur Fortran-Startseite | |
<< Fortran 2003 | Bibliotheken >> |
< Programmaufbau | Zeiger > |