Unità di programma: Sottoprogrammi interni

Ogni unità di programma (PROGRAM, SUBROUTINE o FUNCTION) può avere a sua volta sottounità SUBROUTINE o FUNCTION interne, introdotte dalla parola chiave CONTAINS e terminate con END... prima del termine dell'unità di programma contenente. Queste subroutine interne sono "private" quindi richiamabili solo dall'unità di programma che le contiene e hanno accesso a tutte le variabili locali all'unità contenente, oltre ad avere la possibilità di ricevere parametri come i sottoprogrammi ordinari.

Le unità di sottoprogramma interne hanno una INTERFACE definita implicitamente dal compilatore, con tutti i vantaggi che ciò comporta.

La maniera consigliata per rimpiazzare le decadenti statement function è proprio attraverso una FUNCTION interna, per il resto i sottoprogrammi interni hanno un uso abbastanza limitato.

PROGRAM geometria
INTEGER :: i, j, k
REAL :: pi, r

pi = 3.14159
PRINT*,'Dammi il raggio:'
READ*, r
PRINT*,'Area della circonferenza:', area_circ(r)

CONTAINS

REAL FUNCTION area_circ(r)
REAL :: r

area_circ = r*r*pi

END FUNCTION area_circ

END PROGRAM geometria