2012-02-03 90 views
7

假設我有這樣的一些基本常量定義爲包括模塊不止一次

integer, parameter :: i8 = selected_int_kind(8) 

如果我包括這在我的主程序,我還包括一個模塊,做一些其他的事情模塊(稱之爲模塊functions),但functionsuse s constants,那麼我主要包括我的主程序兩​​次constants

如果是這樣,這是不好的?在程序中包含一個模塊太多次會有危險嗎?

+1

不,這樣做很好。你用'use'語句做的所有事情都是把變量引入子程序範圍。它不像每次「使用」時都聲明變量。唯一需要注意的是循環依賴*,其中模塊「A」使用模塊「B」,模塊「B」使用模塊「A」。這是不允許的。 – Chris 2012-02-03 14:01:18

+1

謝謝,讓這個答案,所以我可以給你一個複選標記! – drjrm3 2012-02-03 14:04:55

+0

謝謝,我已經完成並添加了更多信息。 – Chris 2012-02-03 14:20:38

回答

11

不,這樣做很好。您在use聲明中所做的全部工作是通過使用協會訪問模塊中定義的變量和函數。它不是像每次他們是use'd(但實際上重新聲明它們)都聲明變量。

唯一的是循環依賴,其中模塊A使用模塊B和模塊B使用模塊A警惕。這是不允許的。

編輯:來自Metcalf 。 Fortran 95/2003解釋說, 72:

模塊可能包含訪問其他模塊的use語句。它不能通過use聲明直接或間接訪問自己,例如a訪問bb訪問a

雖然這個引用不能直接回答你的問題,但它重申,你唯一不能做的事情是循環依賴。所以以下是完全有效的:

module one_def 
    implicit none 
    integer, parameter :: one=1 
end module one_def 

module two_def 
    use one_def, only : one 
    implicit none 
    integer, parameter :: two=one+one 
end module two_def 

program test 
    use one_def, only : one 
    use two_def, only : two 
    implicit none 

    print*, two == one+one ! This prints .True. 

end program