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.

5.4 Variabili locali 227<br />

• <strong>Il</strong> loro valore non è conservato tra due chiamate consecutive della procedura.<br />

• ”Non esistono” (ossia non è riservata loro memoria) tra due chiamate consecutive di<br />

procedura.<br />

5.4.1 Attributo e istruzione SAVE<br />

Secondo le specifiche standard del linguaggio, i valori di tutti gli array e delle variabili locali di<br />

una procedura diventano indefiniti all’atto dell’uscita dalla procedura. La volta successiva che<br />

detta procedura viene chiamata, i valori degli array e delle variabili locali potrebbero non essere<br />

stati conservati, ciò dipendendo esclusivamente dal particolare compilatore. <strong>Il</strong> <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong><br />

dispone, tuttavia, di uno strumento che permette di mantenere inalterati i valori degli array e<br />

delle variabili locali fra due chiamate consecutive di procedura. Questo strumento è l’attributo<br />

SAVE che, come qualsiasi altro attributo, deve essere specificato all’interno di una istruzione<br />

di dichiarazione di tipo: qualsiasi variabile locale dichiarata con l’attributo SAVE sarà salvata<br />

fra due chiamate di procedura. La sintassi di una istruzione di definizione di variabile con<br />

l’attributo SAVE è la seguente:<br />

tipo, SAVE :: lista_di_variabili<br />

mentre un esempio valido è il seguente:<br />

COMPLEX, SAVE :: x, y, z<br />

Le variabili locali definite con l’attributo SAVE, pertanto, si comportano esattamente come<br />

variabili static del C.<br />

Si noti che qualsiasi variabile locale che venga inizializzata in un’istruzione di dichiarazione di<br />

tipo viene automaticamente salvata, indipendentemente dal fatto che venga specificato o meno<br />

l’attributo SAVE. Ad esempio, le seguenti variabili saranno salvate entrambe fra due chiamate<br />

consecutive delle procedure che le contengono:<br />

REAL, SAVE :: x1=0.<br />

REAL :: x2=0.<br />

<strong>Il</strong> <strong>Fortran</strong> <strong>90</strong>/<strong>95</strong> dispone, inoltre, dell’istruzione SAVE. Si tratta di un’istruzione non eseguibile<br />

che va inclusa nella sezione dichiarativa della procedura con le istruzioni di dichiarazione di<br />

tipo. Tutte le variabili locali elencate nell’istruzione SAVE restano inalterate fra due chiamate<br />

consecutive della procedura. Se nessuna variabile viene specificata nell’istruzione SAVE saranno<br />

salvate tutte le variabili locali. <strong>Il</strong> formato dell’istruzione SAVE è il seguente:<br />

SAVE :: lista_di_variabili<br />

o semplicemente:<br />

SAVE<br />

A conclusione dell’argomento si sottolinea l’ovvia inutilità dell’uso dell’attributo o dell’istruzione<br />

SAVE relativamente ai dati dichiarati con l’attributo PARAMETER. E’ altresì evidente che<br />

l’attributo e l’istruzione SAVE non hanno alcun significato in un programma principale poiché<br />

l’uscita dal main costituisce la fine dell’esecuzione del programma.

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

Saved successfully!

Ooh no, something went wrong!