Module

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