模塊就像一個(gè)包,你可以保持你的功能和子程序,如果你正在編寫(xiě)一個(gè)非常大的項(xiàng)目,或者你的函數(shù)或子程序可以在多個(gè)程序中使用。
模塊為您提供多個(gè)文件之間的分裂你的程序的方式。
模塊用于:
一個(gè)模塊由兩部分組成:
模塊的一般形式是:
module name [statement declarations] [contains [subroutine and function definitions] ] end module [name]
您可以將在通過(guò)使用語(yǔ)句程序或子程序模塊:
use name
請(qǐng)注意
您可以添加盡可能多的模塊可以根據(jù)需要,將各自在不同的文件,并單獨(dú)編譯。
模塊可以以各種不同的程序中使用。
模塊可以在同一程序中可使用多次。
在模塊規(guī)范部分中聲明的變量是全局的模塊。
一個(gè)模塊中聲明的變量成為在使用的模塊的任何程序或常規(guī)全局變量。
使用聲明可以出現(xiàn)在主程序中,或它使用的程序或特定的模塊中定義的變量的任何其他子程序或模塊。
例
下面的例子演示了這個(gè)概念:
module constants implicit none real, parameter :: pi = 3.1415926536 real, parameter :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts end module constants program module_example use constants implicit none real :: x, ePowerx, area, radius x = 2.0 radius = 7.0 ePowerx = e ** x area = pi * radius**2 call show_consts() print*, "e raised to the power of 2.0 = ", ePowerx print*, "Area of a circle with radius 7.0 = ", area end program module_example
當(dāng)你編譯和執(zhí)行上面的程序,它會(huì)產(chǎn)生以下結(jié)果:
Pi = 3.14159274 e = 2.71828175 e raised to the power of 2.0 = 7.38905573 Area of a circle with radius 7.0 = 153.938049
缺省情況下,一個(gè)模塊中的所有的變量和子程序被提供給正在使用該模塊的代碼,通過(guò)使用語(yǔ)句的程序。
但是,你可以控制的模塊代碼使用私人和公共屬性的可訪問(wèn)性。當(dāng)你聲明一些變量或子程序?yàn)樗接?,這不是可用的模塊外。
例
下面的例子說(shuō)明了這一概念:
在前面的例子中,我們有兩個(gè)模塊變量,e和圓周率。讓我們把他們的私人和觀察輸出:
module constants implicit none real, parameter,private :: pi = 3.1415926536 real, parameter, private :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts end module constants program module_example use constants implicit none real :: x, ePowerx, area, radius x = 2.0 radius = 7.0 ePowerx = e ** x area = pi * radius**2 call show_consts() print*, "e raised to the power of 2.0 = ", ePowerx print*, "Area of a circle with radius 7.0 = ", area end program module_example
當(dāng)你編譯和執(zhí)行上面的程序,它提供了以下錯(cuò)誤信息:
ePowerx = e ** x 1 Error: Symbol 'e' at (1) has no IMPLICIT type main.f95:19.13: area = pi * radius**2 1 Error: Symbol 'pi' at (1) has no IMPLICIT type
由于e和圓周率,既被聲明為私有,module_example無(wú)法再訪問(wèn)這些變量程序。
然而,其他模塊的子程序可以訪問(wèn)它們:
module constants implicit none real, parameter,private :: pi = 3.1415926536 real, parameter, private :: e = 2.7182818285 contains subroutine show_consts() print*, "Pi = ", pi print*, "e = ", e end subroutine show_consts function ePowerx(x)result(ePx) implicit none real::x real::ePx ePx = e ** x end function ePowerx function areaCircle(r)result(a) implicit none real::r real::a a = pi * r**2 end function areaCircle end module constants program module_example use constants implicit none call show_consts() Print*, "e raised to the power of 2.0 = ", ePowerx(2.0) print*, "Area of a circle with radius 7.0 = ", areaCircle(7.0) end program module_example
當(dāng)你編譯和執(zhí)行上面的程序,它會(huì)產(chǎn)生以下結(jié)果:
Pi = 3.14159274 e = 2.71828175 e raised to the power of 2.0 = 7.38905573 Area of a circle with radius 7.0 = 153.938049
更多建議: