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.7 Interfacce esplicite ed implicite 241<br />

Concettualmente l’interface block può essere visto come l’equivalente dei prototipi di funzione<br />

del linguaggio C.<br />

Ad esempio, considerata la seguente procedura:<br />

! N.B.: Tutte le righe evidenziate con l’asterisco<br />

! devono far parte dell’interface block<br />

SUBROUTINE expsum(n,k,x,sum) ! (*)<br />

USE dati_comuni, ONLY: long ! (*)<br />

IMPLICIT NONE ! (*)<br />

INTEGER, INTENT(IN) :: n ! (*)<br />

REAL(long), INTENT(IN) :: k, x ! (*)<br />

REAL(long), INTENT(OUT) :: sum ! (*)<br />

REAL(long) :: cool_time<br />

sum = 0.0<br />

DO i = 1, n<br />

sum = sum + exp(-i*k*x)<br />

END DO<br />

END SUBROUTINE expsum ! (*)<br />

la sua interfaccia è resa esplicita a mezzo del seguente interface block:<br />

INTERFACE<br />

SUBROUTINE expsum(n,k,x,sum)<br />

USE dati_comuni, ONLY: long<br />

IMPLICIT NONE<br />

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

REAL(long), INTENT(IN) :: k, x<br />

REAL(long), INTENT(OUT) :: sum<br />

END SUBROUTINE expsum<br />

END INTERFACE<br />

Chiaramente, l’interface block deve essere contenuto all’interno dell’unità di programma<br />

chiamante e può contenere anche più di una procedura.<br />

Di seguito si riportano in maniera organica tutti i casi in cui un interface block è obbligatorio.<br />

Alcuni di questi casi saranno più chiari proseguendo nella lettura di queste note.<br />

• Un interface block è richiesto per una procedura esterna o una procedura di modulo:<br />

– che ”definisca” o ”sovrapponga” un operatore aritmetico o l’operatore di assegnazione.<br />

– che usi un nome generico.<br />

• Un interface block è richiesto per una procedura esterna quando:<br />

– è invocata con argomenti che siano parole chiave e/o opzionali.<br />

– è una funzione array o una funzione puntatore, oppure una funzione stringa di<br />

caratteri lunghezza presunta.

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

Saved successfully!

Ooh no, something went wrong!