假定和延遲長度型別引數

字元型別或具有長度引數的派生型別的變數可以具有假定延遲的長度引數。字元變數 name

character(len=len) name

貫穿執行時的長度為 len。相反,長度說明符可以是

character(len=*) ...  ! Assumed length

要麼

character(len=:) ...  ! Deferred length

假設長度變數假定其長度來自另一個實體。

在功能

function f(dummy_name)
  character(len=*) dummy_name
end function f

偽引數 dummy_name 具有實際引數的長度。

名為 constant const_name in

character(len=*), parameter::const_name = 'Name from which length is assumed'

長度由右側的常量表示式給出。

延遲長度型別引數可能在執行期間變化。具有延遲長度的變數必須具有 allocatablepointer 屬性

character(len=:), allocatable::alloc_name
character(len=:), pointer::ptr_name

可以通過以下任何方式設定這樣的變數長度

allocate(character(len=5) :: alloc_name, ptr_name)
alloc_name = 'Name'         ! Using allocation on intrinsic assignment
ptr_name => another_name    ! For given target

對於具有長度引數化的派生型別,語法類似

  type t(len)
    integer, len::len
    integer i(len)
  end type t

  type(t(:)), allocatable::t1
  type(t(5)) t2

  call sub(t2)
  allocate(type(t(5)) :: t1)

contains

  subroutine sub(t2)
    type(t(*)), intent(out) :: t2
  end subroutine sub

end