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ę.

questionAnswers(1)

yourAnswerToTheQuestion