声明数组的不同语法:有和没有维度语句
Different syntaxes to declare arrays: with and without the dimension statement
我正在使用 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 的哪些版本支持哪些语法,或者是否可以声明 rank、shapes 和 extents数组至于 m
只是编译器的扩展?
声明
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
一个 rank-2 数组,但是 m2
和 m3
标量(除非在其他地方给定数组属性或者实际上是函数)而 n1
, n2
和 n3
都是形状为 [3,4]
的 2 阶数组
问题的两个声明可以简单地
integer, dimension(3,4) :: m, n
"almost" 是因为我们可以拥有
integer, dimension(3,4) :: n, p(5)
其中 p
的形状是 [5]
,覆盖之前指定的 [3,4]
。
我正在使用 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 的哪些版本支持哪些语法,或者是否可以声明 rank、shapes 和 extents数组至于 m
只是编译器的扩展?
声明
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
一个 rank-2 数组,但是 m2
和 m3
标量(除非在其他地方给定数组属性或者实际上是函数)而 n1
, n2
和 n3
都是形状为 [3,4]
问题的两个声明可以简单地
integer, dimension(3,4) :: m, n
"almost" 是因为我们可以拥有
integer, dimension(3,4) :: n, p(5)
其中 p
的形状是 [5]
,覆盖之前指定的 [3,4]
。