2016-04-07 52 views
0

都像下面在模塊1或模塊1本身包含的SUBROUTINE中使用module2?

MODULE module1 
    USE module2 
    IMPLICIT NONE 
     : 
CONTAINS 

    SUBROUTINE subroutine1 
     IMPLICIT NONE 
      : 
    END SUBROUTINE subroutine1 

    SUBROUTINE subroutine2 
     IMPLICIT NONE 
      : 
    END SUBROUTINE subroutine2 

END MODULE module1 

模塊和另外一個類似下面的

MODULE module1 
    IMPLICIT NONE 
     : 
CONTAINS 

    SUBROUTINE subroutine1 
     USE module2 
     IMPLICIT NONE 
      : 
    END SUBROUTINE subroutine1 

    SUBROUTINE subroutine2 
     IMPLICIT NONE 
      : 
    END SUBROUTINE subroutine2 

END MODULE module1 
一個事實,即在第一種情況下兩個子程序見模塊2

之間相隔有顯著差異?

+2

另外請記住,一旦你在模塊級別有'implicit none',就沒有必要在子程序級複製'implicit none'。如果您的模塊被聲明爲如此,那麼您的模塊中包含的所有內容都會自動變爲「隱含」。 – NoseKnowsAll

回答

3

,可以是顯著,哪一個應該知道的區別是,在

MODULE module1 
    USE module2 

module1將默認的出口也module2所有公共符號。如果僅在子例程中使用module2,則不會發生這種情況,因爲模塊沒有看到它。

所以:

module module2 
    integer int 
    end module 

    module module1 
    use module2 
    end module 

    use module1 
    print *, int 
    end 

是可能的,但

module module2 
    integer int 
    end module 

    module module1 
    contains 
    subroutine s 
     use module2 
    end subroutine 
    end module 

    use module1 
    print *, int 
    end 

不是。

當然,這種行爲可以通過only子句和privatepublic陳述進行更細節的控制。