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_kindist neu. Ihre Funktionsweise ist äquivalent zu den bereits aus Fortran 90/95 bekannten Funktionenselected_int_kindundselected_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 |
Dies gilt uneingeschränkt für Intels ifx (2025.2), dem AOCC-Compiler (flang, 2024_09_24) und gfortran (14.2.0, 2024).
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.
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 > |