2013-01-12 49 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

答案應該更好地提及數組部分。我正在爲這個問題尋找一個愚蠢的目標。 –

相關問題