25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.5 Moduli 233<br />

Tuttavia, se il nome digitato per errore coincide con il nome di una variabile del modulo usato,<br />

questo errore non sarà individuato dal compilatore. L’unico modo di ovviare a un simile<br />

inconveniente è, pertanto, quello di evitare che l’unità di programma, sede dell’associazione di<br />

USE, abbia visibilità di quelle variabili che non usa. Questa è, appunto, la funzione di ONLY.<br />

Un problema che può insorgere con le variabili globali è quello noto col nome di name clash,<br />

ossia può accadere che uno stesso nome venga usato per identificare due differenti variabili in<br />

parti diverse di un programma. Questo problema può essere risolto facendo sì che una variabile<br />

globale possa essere riferita con un nome locale:<br />

USE nome_modulo, nome_locale => nome_globale<br />

Con il simbolo => si fa semplicemente corrispondere un identificatore locale ad una variabile<br />

globale: a parte la similitudine formale, esso non ha nulla in comune con l’istruzione di<br />

associazione di un puntatore. A titolo di esempio, si consideri la seguente istruzione:<br />

USE global, x=>a<br />

In questo caso, l’unità di programma in cui questa istruzione è collocata avrà accesso a tutte le<br />

variabili definite nel modulo global ma sarà ”costretto” a riferirsi alla variabile a con il nome<br />

locale x.<br />

Chiaramente le due facility,ONLY e=>, possono essere combinate, come nel seguente esempio:<br />

USE global, ONLY: a, b=>y<br />

in modo da dare soluzioni particolarmente versatili ed efficienti.<br />

Come si sarà potuto intuire leggendo queste pagine e, soprattutto, come risulterà ancora<br />

più chiaro proseguendo la lettura di queste note, l’uso di moduli in programma può tornare<br />

estremamente utile e può aiutare il programmatore a sviluppare codici efficienti, compatti e<br />

facilmente mantenibili. Tuttavia è doveroso segnalare anche alcuni ”svantaggi” connessi al loro<br />

utilizzo e che sono, sostanzialmente, tutti quelli elencati di seguito:<br />

• Ogni modulo deve essere compilato prima di ogni altra unità di programma che ne faccia<br />

uso; questo può significare, ad esempio, che il programma principale debba essere l’ultima<br />

unità ad essere compilata piuttosto che la prima, come sarebbe più logico.<br />

• Un cambiamento apportato ad un modulo implica la ricompilazione di tutte le unità che<br />

lo usano, il che naturalmente, può condurre a processi di compilazioni assai lenti.<br />

• Di solito la compilazione di un modulo produce un unico oggetto (di solito un file ”.mod”)<br />

che deve essere linkato per intero al resto del programma per cui una qualsiasi associazione<br />

di USE fa sì che tutto il codice del modulo debba essere presente nel programma eseguibile<br />

5.5.1 Restrizione della visibilità di un modulo<br />

In generale, tutte le entità definite in un modulo sono accessibili alle unità di programma che<br />

usano quel modulo. Tuttavia è spesso necessario restringere al minimo la visibilità delle entità

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

Saved successfully!

Ooh no, something went wrong!