声明数组的不同语法:使用和不使用维度语句

时间:2017-09-10 14:54:31

标签: arrays syntax fortran gfortran fortran90

我正在使用gfortran版本7.2.0。我对Fortran很新。我知道有不同版本的Fortran。在下面的代码中,我使用不同的语法声明数组(或实际上是张量)

program arrays
    implicit none

    integer :: m(3, 4)
    integer, dimension(3, 4) :: n

    print *, "m = ", m
    print *, "n = ", n

end program arrays

在一个案例中,我使用dimension声明,而另一个我不是。该程序编译(没有错误)。我使用gfortran的标记-g-fbounds-check。上面程序的文件的文件扩展名为f.90

为什么在Fortran中显然声明数组有不同的语法?哪个版本的Fortran支持哪种语法,或者可以声明排名形成范围数组m只是编译器的扩展?

1 个答案:

答案 0 :(得分:4)

陈述

integer :: m(3, 4)
integer, dimension(3, 4) :: n
自从Fortran 90以来,

都是标准的Fortran。没有使用::第一行就像

integer m(3,4)

在Fortran 90之前有效。

在转到其他内容之前,,dimension不是维语句,而是属性规范。维度声明将是

dimension n(3,4)  ! With n implicitly or explicitly typed elsewhere

重要的是,使用类型声明指定的属性适用于(几乎)声明的所有对象。所以

integer :: m1(3,4), m2, m3
integer, dimension(3,4) :: n1, n2, n3

m1视为排名为2的数组,但是m2m3标量(除非在别处给出数组属性或实际上是函数),而n1,{{1} }和n2都是排名为n3

的排名2数组

问题的两个声明可能只是

[3,4]

“差不多”来自我们可以拥有的事实

integer, dimension(3,4) :: m, n

integer, dimension(3,4) :: n, p(5) 的形状为p,覆盖之前指定的[5]