2015-05-26 149 views
3

我想了解包含在Fortran代碼: http://heath.cs.illinois.edu/courses/cs598mh/george_liu.pdf陣列中的子程序,Fortran 77的

在子程序具體而言,數組變量聲明。這裏有一個例子:

 SUBROUTINE ROOTLS (ROOT, XADJ, ADJNCY, MASK, NLVL, XLS, LS) 
C 
     INTEGER ADJNCY(1), LS(1), MASK(1), XLS(1) 
     INTEGER XADJ(1), I, J, JSTOP, JSTRT, LBEGIN 

我對(1)陣列例如ADJNCY(1)XADJ(1)的名稱後混淆。這些陣列肯定比一個大。 (1)在這些聲明中做了什麼?

回答

3

事實上,這是不FORTRAN 77,但FORTRAN 66 ;-)

(1)dirty hack in FORTRAN 66構造類似的假定大小陣列。在FORTRAN 77中,這被標準化爲(*)

假設大小意味着數組的實際值取決於傳遞給子例程的實際數組的長度。但請注意,數組的形狀不一定保留! Se here對此有極好的解釋。

+0

哇!非常感謝!!!我不知道代碼更老。 :-) – Khubunku

+0

只是因爲有人使用舊的約定並不意味着代碼是舊的。我對現代編譯器禁止這一鏈接的說法感到驚訝。英特爾接受它。顯然你不應該繼續使用這個新的代碼,但沒有理由去修改舊的庫代碼來修復它。 – agentp

+1

@agentp編譯器接受它*,如果它不檢查參數*(例如使用外部庫)!只要你提供了函數/子程序的接口(例如模塊中的使用),編譯器肯定不會接受它。 –