Fortran: Fortran 2003: Datentypen
Aus Wikibooks
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Programmaufbau | Zeiger > |
Inhaltsverzeichnis |
[Bearbeiten] Intrinsische Datentypen
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 kleinere Ergänzungen:
- Unterstützung internationaler Zeichensätze in Rahmen der ISO 10646-Norm (
Universal Character Set) - Die Funktion
selected_char_kindist neu. Ihre Funktionsweise ist äquivalent zu den bereits aus Fortran 90/95 bekannten Funktionenselected_int_kindundselected_real_kind.
[Bearbeiten] Enumeration
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-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.
[Bearbeiten] Derived Type
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.
[Bearbeiten] Benannte Parameter
Beispiel:
| Fortran 2003-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.
[Bearbeiten] Vorgabewerte
Ab Fortran 2003 dürfen Variablen in einem Derived Type auch mit Vorgabewerten (default values) belegt werden.
Beispiel:
| Fortran 2003-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
|
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Programmaufbau | Zeiger > |