Fortran中function,subroutine, interface和module的簡單使用
阿新 • • 發佈:2019-02-12
程式碼執行在simply fortran2下,複製,貼上可直接執行看效果
!!!!!-------------------
! Fortran中函式分兩類:子程式(subroutine)和自定義函式(function)。
! 自定義函式本質上就是一般數學上的函式,一般要傳遞自變數給自定義函式,返回函式值。
! 子程式不一定是這樣,可以沒有返值也可以多個返回值。
! func能做到的事,sub一定能做到。
! 傳遞引數要注意型別的對應,這跟C是一樣的。
!!!!!-------------------
!!!!!!!!!
! Module不是函式。它用於封裝程式模組,一般是把具有相關功能的函式及變數封裝在一起
! 。用法很單,但能提供很多方便,使程式變得簡潔,比如使用全域性變數不必每次都宣告一長串,
! 寫在odule裡呼叫就行了。Module一般寫在主程式開始之前。
!!!!!!!!!
program helloworld
use opModule
! 在主程式或函式中使用時,需要在宣告之前先寫上一行:
! use module_name.
implicit none
real(kind = 4):: a = 2.0, b = 3.0, add_result = 0.0
interface ! 宣告函式呼叫介面,sub無需宣告可直接呼叫
real(kind=4) function add_func(a, b)
implicit none
real(kind=4) :: a, b
end function add_func
end interface
! 注意sub的呼叫方式 call subname(╬aram1, ...)
call add_sub(a, b, add_result)
Print *, "Hello World!", add_result, add_func(a, b)
call prtHi()
print*, M_add_func(2.3, 4.3), M_result
end program helloworld
subroutine add_sub(a, b, add_result)
implicit none
real(kind=4) :: a, b, add_result
add_result = a + b;
end subroutine add_sub
real(kind=4) function add_func(a, b)
implicit none
real(kind=4) :: a, b
add_func = a + b
end function add_func
!!!!!!
! Module中有函式時必須在contains命令之後(即在某一行寫上contains然後下
! 面開始寫函式)。並且module中定義過的變數在module裡的
! 函式中可直接使用,函式之間也可以直接相互呼叫(包括主程式或其他包含module的子函式中),
! 連module中的自定義函式在被呼叫時也不用先宣告。
!!!!!!
module opModule
real(kind = 4) :: M_result
contains
subroutine prtHi()
implicit none
print *, 'hello fortran, hello 2016.11.16 10:55'
end subroutine prtHi
real(kind=4) function M_add_func(a, b)
implicit none
real(kind=4) :: a, b
M_result = a + b
M_add_func = M_result
end function M_add_func
end module opModule