Fortran 中维度如何工作

How does dimension work in Fortran

我不明白为什么

IMPLICIT REAL*8(A-Z)
DIMENSION A(20)

编译正常,

REAL*8, DIMENSION A(20)

导致错误

Missing dimension specification at ...

IMPLICIT REAL*8(A-Z)
DIMENSION A(20)

是fortran早期版本引入的数组语句声明(参见this link for example),就是这样工作的。

REAL*8, DIMENSION A(20)

不是f77,也不是f90或其他。 Fortran 90 及更高版本使用此

REAL*8, DIMENSION(20) :: A

这是dimension的两种不同含义。第一个是 dimension 语句,第二个是要在声明中指定 dimension 属性。

在指定属性的声明中,必须有 :::

REAL*8, DIMENSION(20) :: A

另请注意,数组规范附加到 dimension,而不是变量名。

:: 的使用在 dimension 语句中只是可选的(除了在 Fortran 77 中是不允许的)。

不过,干脆允许这样写

real*8 A(20)

因为 dimension 属性也通过给出数组规范来指定。


可能还值得注意的是,由于问题中的声明行不正确,因此在固定格式源中错误是不同的。

在固定格式的源代码中,空格不重要(超出列布局),所以

      real*8, dimension a(20)

是声明

      real*8 dimensiona(20)

带有多余的逗号。