2013-01-12 50 views
5

我是Fortran95的绝对初学者,所以我为这个问题的简单性而道歉。 我希望能够在整数来定义的阵列的尺寸,但我得到的错误FORTRAN 95,数组必须具有恒定的形状误差

“的模块或主程序数组‘’在(1)必须具有恒定的形状”

和'arrayx变量'y'不能出现在(1)'的表达式中(x的同一个错误)。 难道根据变量来定义维度是不可能的,还是我只是想念一些明显的东西。

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

回答

7

变量与save属性不是常数和编译器的理由抱怨。在你的代码片段中用parameter属性替换该属性,这使得它们成为常量,并且在编译时,数组可以固定大小,编译器不应该抱怨。

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

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

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

可以简单地写

integer :: x=40, y=2 

个人而言,我倾向于让自己的意图,当我写一个子程序是很清楚,我以后使用save属性。

+0

答案应该更好地提及数组部分。我正在为这个问题寻找一个愚蠢的目标。 –

相关问题