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.

240 Unità di Programma<br />

Nel seguente esempio il programma chiamante invoca una procedura definita all’interno di<br />

un modulo tentando di passarle un valore reale anziché uno intero: il compilatore risponderà<br />

certamente con un messaggio di errore:<br />

MODULE my_sub<br />

CONTAINS<br />

SUBROUTINE bad_arg(k)<br />

IMPLICIT NONE<br />

INTEGER, INTENT(IN) :: k<br />

WRITE(*,*) "k = ", k<br />

END SUBROUTINE<br />

END MODULE<br />

PROGRAM bad_call<br />

USE my_sub<br />

IMPLICIT NONE<br />

REAL :: x=1.<br />

CALL bad_arg(x) ! illegale: il compilatore dara’ un messaggio di errore<br />

END PROGRAM<br />

Nel caso in cui la subroutine bad_arg fosse stata una procedura esterna il compilatore non<br />

avrebbe dato alcun messaggio di errore ma il programma si sarebbe arrestato durante il run.<br />

5.7.1 Interface Block<br />

Anche per le procedure esterne, tuttavia, il <strong>Fortran</strong> <strong>90</strong> mette a disposizione uno strumento,<br />

l’interface block, a mezzo del quale è possibile rendere esplicita l’interfaccia. La forma generale<br />

di un interface block è:<br />

INTERFACE<br />

corpo dell’interfaccia<br />

END INTERFACE<br />

Si noti che, contrariamente alle istruzioni END delle altre unità di programma, nel <strong>Fortran</strong> <strong>90</strong><br />

le istruzioni END INTERFACE non possono avere un nome. Questa limitazione è stata rimossa<br />

dal <strong>Fortran</strong> <strong>95</strong> per cui, con il nuovo standard, la sintassi dell’interface block è diventata:<br />

INTERFACE [nome_interfaccia]<br />

corpo dell’interfaccia<br />

END INTERFACE [nome_interfaccia]<br />

<strong>Il</strong> corpo dell’interfaccia comprende la istruzione di FUNCTION (o SUBROUTINE), le istruzioni<br />

di dichiarazione di tipo dei parametri formali, e le istruzioni END FUNCTION (o END<br />

SUBROUTINE). In altre parole, esso è l’esatta copia del sottoprogramma privato della dichiarazione<br />

delle variabili locali, della sua sezione esecutiva e delle eventuali procedure interne.

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

Saved successfully!

Ooh no, something went wrong!