2008-10-21 158 views

回答

22

這隻會用Fortran 90的模塊工作。在模塊聲明中,您可以使用「public」和「private」關鍵字指定變量和例程列表的訪問限制。我通常發現最初使用private關鍵字會很有幫助,它指定模塊中的所有內容都是私有的,除非明確標記爲public。

在下面的代碼示例中,subroutine_1()和function_1()可以通過必要的「use」語句從模塊外部訪問,但任何其他變量/子例程/函數都將是私有的。

module so_example 
    implicit none 

    private 

    public :: subroutine_1 
    public :: function_1 

contains 

    ! Implementation of subroutines and functions goes here 

end module so_example 
2

我從來沒有寫過一行FORTRAN,但this thread about "Private module procedures"似乎是熱門話題,至少我希望如此。似乎至少包含答案。


jaredor摘要:

的公共/私有屬性模塊中存在Fortran 90中和以後。 Fortran 77及更早版本 - 你運氣不好。

+1

你可以理解的謙虛你信用,但你可以更明確:答案是在該線程。公共/私有屬性存在於Fortran 90及更高版本的模塊中。 Fortran 77及更早版本 - 你運氣不好。 – jaredor 2008-10-21 13:08:40

1
Private xxx, yyy, zzz 

real function xxx (v) 
    ... 
end function xxx 

integer function yyy() 
    ... 
end function yyy 

subroutine zzz (a,b,c) 
    ... 
end subroutine zzz 

... 
other stuff that calls them 
... 
2

如果你使用的模塊,這裏是語法:

PUBLIC :: subname-1, funname-2, ... 

PRIVATE :: subname-1, funname-2, ... 

民營上市所有實體將無法從該模塊的外部訪問所有實體上市可從外部訪問該模塊。默認情況下,所有其他實體都可以從模塊外部訪問。

MODULE Field 
    IMPLICIT NONE 

    Integer :: Dimen 

    PUBLIC :: Gravity 
    PRIVATE :: Electric, Magnetic 

CONTAINS 

    INTEGER FUNCTION Gravity() 
    .......... 
    END FUNCTION Gravity 


    REAL FUNCTION Electric() 
    .......... 
    END FUNCTION 


    REAL FUNCTION Magnetic() 
    .......... 
    END FUNCTION 

    .......... 

END MODULE Field