这个功能是否在最近的Fortran标准版中提供?

rks*_*171 2 arrays fortran

我发现由于数组大小不匹配而使用gcc v.4.4.6构建的代码无法运行,我感到非常惊讶.使用gcc v.4.7.3构建时,它工作正常.我创建了一个最小的工作示例来显示问题的根源:

program main

   implicit none

   integer, allocatable, dimension(:,:) :: array_a
   integer, allocatable, dimension(:,:) :: array_b

   allocate(array_a(5,2))
   allocate(array_b(2,1))

   array_a = 1 

   array_b = array_a

   print *, array_a
   print *, array_b

end program main
Run Code Online (Sandbox Code Playgroud)

使用gcc v.4.4.6构建时,它会在运行时崩溃并出现错误:

在文件main.f90的第13行Fortran运行时错误:数组绑定不匹配,数组'array_b'的维度1的大小不匹配(1/4)

使用gcc v.4.7.3构建时,它会产生以下输出:

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

注意,它会自动调整'array_b'的大小以匹配'array_a'的大小.这是我所看到的更新的Fortran标准提供的"功能"吗?

Vla*_*r F 6

您正在使用Fortran 2003功能 - 分配时自动重新分配数组.它尚未在gcc-4.4中实现.

此功能意味着之前分配给不合格形状的数组b会自动重新分配到赋值右侧的形状.对于Fortran 2003功能,您必须使用最新的编译器版本(不仅仅是GCC).