【问题标题】:How does dimension work in Fortran维度在 Fortran 中如何工作
【发布时间】:2015-08-17 12:52:21
【问题描述】:

我不明白为什么

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

编译正常,并且

REAL*8, DIMENSION A(20)

导致错误

在 ... 处缺少尺寸规范

【问题讨论】:

    标签: arrays fortran declare


    【解决方案1】:

    这是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)
    

    带有多余的逗号。

    【讨论】:

    • 谢谢,很有帮助!
    【解决方案2】:
    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
    

    【讨论】:

    • @HighPerformanceMark,虽然细节很重要,我有时会忘记注意,但我应该注意。 francescalus 的评论(他已经删除)实际上提醒我,我从未关注过 fortran 66。我几乎从不考虑它,除非我正在教编程语言的历史,然后我别无选择地说一句话。我被介绍到 fortran 77,但我从来没有低于过。
    猜你喜欢
    • 2022-10-20
    • 1970-01-01
    • 2011-07-21
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2022-01-25
    相关资源
    最近更新 更多