处理无限多态虚拟参数的各个元素时,选择了错误的列

问题描述

考虑以下Fortran程序:

program test_prg
  implicit none
  integer :: i
  integer,allocatable :: arr(:,:)

  arr = reshape([(i,i = 1,100)],[10,10])
  do i = 1,3
    print *,'Column',i
    call write_array(arr(1:2,i)) 
  end do

contains

  subroutine write_array(array)
    class(*),intent(in) :: array(:)
    integer :: i

    do i = 1,size(array)
      select type (elem => array(i))
        type is (integer)
          print '(I0)',elem
      end select
    end do
  end subroutine


  subroutine write_array_alt(array)
    class(*),intent(in) :: array(:)
    integer :: i

    select type (array)
      type is (integer)
        print '(I0)',array
    end select
  end subroutine

end program

与gfortran 9.3.0一起编译的程序会打印:

 Column           1
1
2
 Column           2
21
22
 Column           3
41
42

如您所见,它会跳过其他所有列。如果将对write_array调用替换为对write_array_alt调用,其中整个数组而不是单个元素的select type都是{{1}},那么将按预期方式打印每列。这是gfortran错误还是此代码非法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)