2013-04-24 43 views
2

我是Fortran的新手,但一般情況下我發現我可以用C或Matlab完成大部分工作,一旦我掌握了模塊和類型的頭部。然而,根據我是否使用gfortran(gcc版本4.6.2)或ifort(13.0.2),我被這個結果的差異所困擾。 Gfortran給了我期望的結果,但是ifort給了我3個空行!任何想法爲什麼?ifort和gfortran在定義我自己的類型時的不同結果

module define_structures 
implicit none 
private 

public modelling_params 

    type modelling_params 
     real, dimension(:), allocatable :: freqs 
     real, dimension(:), allocatable :: offsets  
     complex, dimension(:), allocatable :: data 
    end type modelling_params 
end module define_structures 

program main 

use define_structures 
    implicit none 

    type (modelling_params) :: S 

    S%data = [(1,1) ,(2,3), (3,1)] 
    S%freqs = [1, 3, 7] 
    S%offsets = [100, 200, 300] 
    print *,S%data 
    print *,S%freqs 
    print *,S%offsets 


end program main 

下面是從gfortran

( 1.0000000 , 1.0000000 ) ( 2.0000000 , 3.0000000 ) ( 3.0000000 , 1.0000000 ) 
1.0000000  3.0000000  7.0000000  
100.00000  200.00000  300.00000 

並與ifort編譯輸出,我只是得到3個空行,儘管它編譯罰款!

在此先感謝。

回答

2

-assume realloc_lhs命令行選項傳遞給編譯器時,啓用了對ifort中賦值時可分配變量重新分配的支持。如果您插入第一個任務後,立即如下:

print *, allocated(S%data) 

你會看到F,這意味着當分配到分配領域的不分配。代碼按照預期與-assume realloc_lhs一起工作。正如你所說,Hristo。

+0

正如你所說,Hristo。將'-assume realloc_lhs'添加爲編譯器選項使其按預期工作。不過,我很好奇爲什麼我沒有從編譯器那裏得到這個警告。 – 2013-04-25 00:37:32

+0

如果您嘗試在啓用運行時檢查的情況下運行,則在分配給未分配的陣列時應該會出錯。 – 2013-04-25 09:16:50

相關問題