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.

246 Unità di Programma<br />

I nomi dei parametri formali agiscono come delle parole chiave nelle istruzioni di chiamata di<br />

procedura. Pertanto, l’ordine degli argomenti può essere alterato purché tutte le corrispondenze<br />

per nome seguano quelle (ordinate) per posizione. Sono ad esempio, non valide le seguenti<br />

istruzioni di chiamata:<br />

CALL sub(a=1,b=2,3) ! illegale: c non è riferito ’’per nome’’<br />

CALL sub(1,c=x,2) ! illegale: c non è riportato per ultimo<br />

Si noti che quando si usano argomenti in qualità di parole chiave l’interfaccia deve sempre<br />

essere esplicita nell’unità di programma chiamante. Inoltre, tutti gli argomenti con attributo<br />

INTENT(INOUT) che vengano riferiti per nome devono essere assegnati ad una variabile e non<br />

ad un valore. Nell’esempio precedente, infatti, la seguente istruzione di chiamata sarebbe stata<br />

illegale:<br />

CALL sub(a=1,b=2,c=3) ! illegale: c assegnata a un valore<br />

mentre è perfettamente lecito il seguente frammento:<br />

INTEGER :: x=3<br />

...<br />

CALL sub(a=1,b=2,c=x)<br />

5.8.3 Argomenti opzionali<br />

Talvolta, durante l’esecuzione di una procedura, non tutti gli argomenti sono usati. In questi<br />

casi è preferibile definire questi parametri formali con l’attributo OPTIONAL:<br />

tipo, [lista_di_attributi,] OPTIONAL :: parametri_formali_”opzionali”<br />

come nel seguente esempio:<br />

SUBROUTINE sub(a,b,c,d)<br />

INTEGER, INTENT(IN) :: a, b<br />

INTEGER, INTENT(IN), OPTIONAL :: c, d<br />

...<br />

END SUBROUTINE sub<br />

In questo esempio i parametri a e b sono sempre richiesti quando la procedura sub viene<br />

invocata, mentre i parametri c e d sono opzionali per cui le seguenti chiamate di procedura<br />

sono tutte sintatticamente corrette:<br />

CALL sub(a,b)<br />

CALL sub(a,b,c)<br />

CALL sub(a,b,c,d)

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

Saved successfully!

Ooh no, something went wrong!