5

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

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

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

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

1 回答 1

7

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

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

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

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

可以简单地写成

integer :: x=40, y=2

就我个人而言,我倾向于使用该save属性,以便以后我在编写子例程时的意图对我来说很清楚。

于 2013-01-12T18:57:54.260 回答