FORTRAN 95,数组必须具有恒定的形状误差

时间:2013-01-12 18:52:35

标签: arrays fortran

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

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

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

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

1 个答案:

答案 0 :(得分:7)

具有save属性的变量不是常量,编译器会抱怨有理由。在你的代码片段中用parameter属性替换该属性,使其成为常量,并且在编译时,数组可以修改为大小,编译器不应该抱怨。

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

另请注意,Fortran对新(和旧)程序员的一个问题是,在其声明中初始化的变量会自动获取save属性。所以,在子程序中你的行

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

可以简单地写成

integer :: x=40, y=2

我个人倾向于使用save属性,以便我在编写子程序时的意图在以后很清楚。