Zusammenfassung globaler Daten
MODULE KINDS ! statt COMMON INTEGER, PARAMETER :: I4 = SELECTED_INT_KIND(4) ! compiler-abhaengig INTEGER, PARAMETER :: I2 = SELECTED_INT_KIND(2) ! compiler-abhaengig INTEGER, PARAMETER :: R4 = KIND(1.0) INTEGER, PARAMETER :: R8 = SELECTED_REAL_KIND(2*PRECISION(1.0_R4)) END MODULE KINDS ... USE KINDS REAL(KIND=R8) :: A, B
Kapselung von Definitionen, glob. Daten und Funktionen
MODULE RATIONAL_ARITHMETIC
TYPE Ratio
INTEGER :: num, den
END TYPE Ratio
PRIVATE cancel
CONTAINS
TYPE(Ratio) FUNCTION ratmul(r1, r2)
IMPLICIT NONE
TYPE(Ratio), INTENT(IN) :: r1, r2
ratmul%num = r1%num * r2%num
ratmul%den = r1%den * r2%den
CALL cancel(ratmul)
END FUNCTION ratmul
SUBROUTINE cancel(r)
...
END SUBROUTINE cancel
END MODULE RATIONAL_ARITHMETIC
PROGRAM testrat
USE RATIONAL_ARITHMETIC
TYPE(Ratio) :: a, b, c
a=Ratio(2,5)
b=Ratio(1,6)
c = ratmul(a,b)
PRINT*, c
END PROGRAM testrat
Umnennen bei Namenskonflikten
USE MATHPACK ! enthaelt Funktion prod USE STATPACK, sprod => prod ! prod wird als sprod aufgerufen