Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 寻址无限多态伪参数的单个元素时,选择了错误的列_Fortran_Gfortran - Fatal编程技术网

Fortran 寻址无限多态伪参数的单个元素时,选择了错误的列

Fortran 寻址无限多态伪参数的单个元素时,选择了错误的列,fortran,gfortran,Fortran,Gfortran,考虑以下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 subroutin

考虑以下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\u array
的调用替换为对
write\u array\u alt
的调用,其中我选择了整个数组的类型,而不是单个元素,则会按预期打印每一列。这是一个GFrTrAN bug还是这个代码是非法的?< /P>不知道细节,但是与C++、C和Python等其他语言一样,整型是一个基本类型,而不是一个类。如果将基本类型视为类,则地址计算将不正确。在_alt函数中,数组被视为一个类。@cup,一个无限制的多态实体与一个内在类型实体的类型兼容程度与它与一个非内在类型实体的类型兼容程度一样。下面是comp.lang.fortran上的一篇博文,征求意见