25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1.8 Tipi di dati derivati 67<br />

INTEGER :: n=10 ! NB: solo <strong>Fortran</strong> <strong>95</strong><br />

REAL :: x=3.14 ! NB: solo <strong>Fortran</strong> <strong>95</strong><br />

END TYPE mio_tipo<br />

TYPE(mio_tipo) :: mia_var<br />

Chiaramente è possibile inizializzare anche soltanto alcune componenti, in maniera selettiva,<br />

rimandando l’assegnazione delle altre componenti ad una fase successiva:<br />

TYPE :: mio_tipo<br />

INTEGER :: m=5 ! NB: solo <strong>Fortran</strong> <strong>95</strong><br />

INTEGER :: n<br />

REAL :: x=3.14 ! NB: solo <strong>Fortran</strong> <strong>95</strong><br />

END TYPE mio_tipo<br />

TYPE(mio_tipo) :: mia_var<br />

...<br />

mia_var%n = 10<br />

Si osservi che per un oggetto di tipo derivato ”innestato” l’inizializzazione di un componente è<br />

riconosciuta ad ogni livello. Ossia, considerate le seguenti definizioni di tipo:<br />

TYPE :: entry<br />

REAL :: value=2.5<br />

INTEGER :: index<br />

TYPE(entry), POINTER :: next=>NULL()<br />

END TYPE entry<br />

TYPE node<br />

INTEGER :: counter<br />

TYPE(entry) :: element<br />

END TYPE node<br />

e la dichiarazione:<br />

TYPE(node) :: n<br />

il componente n%element%value sarà inizializzato al valore 2.5<br />

Si noti, in conclusione, che quando un compilatore alloca memoria per un oggetto di un<br />

tipo di dati derivato, esso è, conformemente allo standard, non obbligato a riservare alle varie<br />

componenti locazioni di memoria consecutive. Questa ”libertà” fu decisa per fare in modo<br />

che lo standard del linguaggio consentisse ai compilatori concepiti per architetture parallele di<br />

ottimizzare l’allocazione di memoria al fine di garantire le performance migliori in termini di<br />

velocità di esecuzione. Tuttavia, esistono dei casi in cui un ordine ”stretto” delle componenti<br />

è fondamentale. Un esempio è rappresentato dalla eventuale necessità di passare una variabile<br />

di un tipo di dati derivato ad una procedura scritta in un altro linguaggio (ad esempio in<br />

C). In questi casi, allora, è necessario ”forzare” il compilatore affinché esso riservi locazioni<br />

di memoria contigue per le componenti del tipo. Ciò può essere fatto inserendo la speciale

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!