2012-05-11 96 views
4

下面的程序用ifort(版本12),但編譯不與GFortran(高達4.8版本):Fortran的2D陣列初始化

PROGRAM TEST 
IMPLICIT NONE 
REAL,DIMENSION(2,2)::X=(/1,2,3,4/) 

WRITE(*,*) X 

END PROGRAM TEST 

GFortran給出了錯誤

REAL,DIMENSION(2,2)::X=(/1,2,3,4/) 
         1 
Error: Incompatible ranks 2 and 1 in assignment at (1) 

Ifort編譯程序並給出預期的輸出。這是GFortran中的一個錯誤還是英特爾fortran只是允許非標準的數組初始化?

+0

它是否在初始化時使用'RESHAPE()'語句進行​​編譯。 – ja72

回答

6

重新寫入數組聲明路線爲:

REAL,DIMENSION(2,2) :: X = RESHAPE([1,2,3,4],[2,2]) 

原因ifort編譯它的其他方式是非標準的實現。這是一種初始化高於1的排列數組的方法。

+0

打敗我吧。另請參閱此答案http://stackoverflow.com/a/3708370/623518。奇怪的是,我無法獲得有關OP的數組初始化的抱怨,即使我能夠想到所有警告,錯誤和標準版本標誌,儘管我確信它是非標準的。有什麼想法嗎? – Chris

+0

嗯......不確定。採取快捷方式時,ifort通常比pgf90更嚴格,至少與我所做的事情相比,所以我有點驚訝,如果允許這樣做。雖然我對gfortran的經驗很少。 – milancurcic

+0

謝謝大家。我已經瞭解RESHAPE關鍵字。如果ifort接受非標準代碼,真的只是有興趣。似乎答案是肯定的。 – user1390070