2

我是 Fortran 的新手,但我通常发现我可以用 C 或 Matlab 做大部分事情,只要我了解模块和类型。但是,我对结果的这种差异感到困惑,这取决于我使用的是 gfortran(gcc 版本 4.6.2)还是 ifort(13.0.2)。Gfortran 给了我预期的结果,但 ifort 给了我 3 个空白行!任何想法为什么?

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 个空行,尽管它编译得很好!!

提前致谢。

4

1 回答 1

2

ifort-assume realloc_lhs命令行选项传递给编译器时,支持在赋值时重新分配可分配变量。如果您在第一次分配之后立即插入以下内容:

print *, allocated(S%data)

您会看到F,这意味着分配给时未分配可分配字段。代码按预期工作-assume realloc_lhs

于 2013-04-24T22:59:35.947 回答