當所有參數都是同一類型的,你可以把它們放入數組:
subroutine a(inputs)
integer :: inputs(:)
integer, allocatable :: b(:)
integer :: i,j
i = size(inputs)
allocate(b(i))
do j=1,i
b(i)=input(i)
end do
如果他們是不同類型的,你可以使用可選的僞參數。您在訪問它之前檢查每個參數是否存在必須。
subroutine a(in1, in2, in3)
integer :: in1
real :: in2
character :: in3
if (present(in1)) process in1
if (present(in2)) process in2
if (present(in3)) process in3
您也可以使用泛型,您可以在其中手動指定所有可能的組合,然後編譯器然後選擇正確的特定過程進行調用。查看您最喜愛的教科書或教程以瞭解更多內容
module m
interface a
module procedure a1
module procedure a1
module procedure a1
end interface
contains
subroutine a1(in1)
do something with in1
end subroutine
subroutine a2(in1, in2)
do something with in1 and in2
end subroutine
subroutine a2(in1, in2, in3)
do something with in1, in2 and i3
end subroutine
end module
...
use m
call a(x, y)
Fortran使用可選參數,並且您可以檢查此類參數是否存在或不存在。但據我所知,你不能只查詢參數的數量,你必須單獨檢查每個參數。並且都必須在函數的簽名中聲明。 – innoSPG
如果您在函數中分配並且未返回分配的數組,請記住在退出之前解除分配,否則最終會導致大量內存泄漏。 – cup
@cup自從Fortran 95可分配數組自動釋放。我永遠不會釋放它們。至於Fortran 2003,也適用於所有可分配的實體。 –