问题描述
考虑以下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 (将#修改为@)