我是Fortran95的绝对初学者,所以我为这个问题的简单性道歉。 我希望能够用整数来定义数组的维数,但我得到了错误
'(1)处的模块或主程序数组'arrayx'必须具有恒定的形状'
和'变量'y'不能出现在(1)'的表达式中(x的相同错误)。 是不是根据变量来定义维度,或者我只是遗漏了一些明显的东西。
program arrayForm
implicit none
integer, save :: x=40, y=2
real, dimension(x,y) :: arrayX
end program arrayForm
答案 0 :(得分:7)
具有save
属性的变量不是常量,编译器会抱怨有理由。在你的代码片段中用parameter
属性替换该属性,使其成为常量,并且在编译时,数组可以修改为大小,编译器不应该抱怨。
正如您所使用的那样,save
属性是多余的。当应用于可能超出范围的变量时,例如子例程或函数范围内的变量,它要求将变量的值从子范围的一次调用保存到下一个。但是,由于您的变量是在程序范围内声明的,因此在执行期间它们不会超出范围。
另请注意,Fortran对新(和旧)程序员的一个问题是,在其声明中初始化的变量会自动获取save
属性。所以,在子程序中你的行
integer, save :: x=40, y=2
可以简单地写成
integer :: x=40, y=2
我个人倾向于使用save
属性,以便我在编写子程序时的意图在以后很清楚。