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)
带有多余的逗号。
我不明白为什么
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)
带有多余的逗号。