Jaka jest różnica między blokiem INTERFACE a procedurą MODULE w fortran?
Jestem nieco zdezorientowany, jeśli chodzi o użycie bloku interfejsu wewnątrz modułu i użycie instrukcji CONTAINS do utworzenia „jawnego interfejsu” dla procedury wewnątrz modułu.
Zwykle piszę procedurę za pomocą bloku interfejsu wewnątrz modułu. Na przykład,
MODULE ModExample
INTERFACE
SUBROUTINE Sumatory(a, b, c)
IMPLICIT NONE
INTEGER, INTENT(IN)::a
INTEGER, INTENT(OUT)::b
INTEGER, INTENT(OUT)::c
END SUBROUTINE Sumatory
END INTERFACE
END MODULE ModExample
SUBROUTINE Sumatory(a, b, c)
IMPLICIT NONE
INTEGER, INTENT(IN)::a
INTEGER, INTENT(OUT)::b
INTEGER, INTENT(OUT)::c
!Executable statements here
END SUBROUTINE Sumatory
I to działa dla mnie. Ale można to także napisać za pomocą CONTAINS stament wewnątrz modułu, a tak właśnie jest w przykładowych procedurach zapisanych w książkach Fortrana, z którymi się konsultowałem.
MODULE ModExample
CONTAINS
SUBROUTINE Sumatory(a, b, c)
IMPLICIT NONE
INTEGER, INTENT(IN)::a
INTEGER, INTENT(OUT)::b
INTEGER, INTENT(OUT)::c
!Executable statements here
END SUBROUTINE Sumatory
END MODOULE ModExample
Więc co jest nie tak z blokiem INTERFCE? Czy obie są równoważnymi konstrukcjami? Z którego z dwóch programów powinienem skorzystać? Może na wszystkie te pytania można odpowiedzieć dużym „zależy”, ale chciałbym, abyś wyjaśnił ich różnice. Z góry dziękuję.