我正在使用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
只是编译器的扩展?
答案 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的数组,但是m2
和m3
标量(除非在别处给出数组属性或实际上是函数),而n1
,{{1} }和n2
都是排名为n3
问题的两个声明可能只是
[3,4]
“差不多”来自我们可以拥有的事实
integer, dimension(3,4) :: m, n
integer, dimension(3,4) :: n, p(5)
的形状为p
,覆盖之前指定的[5]
。