0

在 fortran 中,假设未分配数组.not.allocated的状态是,并且如果使用save属性声明可分配数组的状态在调用之间保留,是否安全?换句话说,除非输出格式差异很小,是否可以安全地假设以下程序将始终导致输出:

 First time here
 Been here before

测试程序:

  program main
    call sub()
    call sub()
  end program main

  subroutine sub()
    real,save,allocatable,dimension(:) :: a
    if(.not. allocated(a))then
       print*,"First time here"
       allocate(a(10))
    else
       print*,"Been here before"
    endif
  end subroutine sub

我问主要是因为我知道你不能假设指针的默认关联是.not.associated

4

2 回答 2

4

是的!

现在我发现你需要 30 个字符...

于 2013-02-12T17:06:01.073 回答
0

是的,这是 Fortrans 可分配数组的优点之一。但是,如果由于某些原因,您必须使用指针,您可以通过以下方式获得类似的效果:

program main
  call sub()
  call sub()
end program main

subroutine sub()
  real, pointer, dimension(:), save :: a => null()
  if(.not. associated(a))then
    print*,"First time here"
    allocate(a(10))
  else
    print*,"Been here before"
  endif
end subroutine sub

save属性在这里是可选的,因为变量声明中的赋值暗示了这一点。

于 2013-02-13T06:44:07.310 回答