【问题标题】:FORTRAN 95, array must have constant shape errorFORTRAN 95,数组必须有恒定的形状错误
【发布时间】:2013-01-12 18:52:35
【问题描述】:

我是 Fortran95 的绝对初学者,所以对于这个问题的简单性,我深表歉意。 我希望能够用整数定义数组的维度,但我得到了错误

'(1)处的模块或主程序数组'arrayx'必须具有恒定的形状'

并且“变量 'y' 不能出现在 (1)' 处的表达式中(x 的错误相同)。 是根本不可能根据变量来定义维度,还是我只是遗漏了一些明显的东西。

program arrayForm
    implicit none
    integer, save :: x=40, y=2
    real, dimension(x,y) :: arrayX
end program arrayForm

【问题讨论】:

    标签: arrays fortran


    【解决方案1】:

    带有save 属性的变量不是常量,编译器会抱怨。在您的 sn-p 中将该属性替换为 parameter 属性,这使它们保持不变,并且在编译时,数组的大小可以固定,编译器不应该抱怨。

    当您使用它时,save 属性是多余的。当应用于可能超出范围的变量时,例如在子例程或函数范围内的变量,它要求将变量的值从子范围的一次调用保存到下一次调用。但是由于您的变量是在程序范围内声明的,因此它们在执行期间永远不会超出范围。

    还要注意,对于新(和旧)程序员来说,Fortran 的陷阱之一是在其声明中初始化的变量会自动获取save 属性。所以,在一个子程序中你的行

    integer, save :: x=40, y=2
    

    可以写成

    integer :: x=40, y=2
    

    就我个人而言,我倾向于使用save 属性,以便以后我在编写子例程时的意图更加清晰。

    【讨论】:

    • 答案最好也提到数组部分。我正在为那个问题寻找一个欺骗目标。
    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多