Различные результаты ifort и gfortran при определении моего собственного ТИПА

Я новичок в Фортране, но, как правило, обнаруживаю, что могу делать большинство вещей, которые мог бы делать с помощью 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 пустые строки, хотя компилируется нормально !!

Заранее спасибо.


person branden_burger    schedule 24.04.2013    source источник


Ответы (1)


Поддержка перераспределения выделяемых переменных при назначении в ifort включается, когда параметр командной строки -assume realloc_lhs передается компилятору. Если вы вставите следующее сразу после первого назначения:

print *, allocated(S%data)

вы увидите F, что означает, что выделяемое поле не выделяется при назначении. Код работает как ожидалось с -assume realloc_lhs.

person Hristo Iliev    schedule 24.04.2013
comment
В точности как ты говоришь, Христо. Добавление -assume realloc_lhs в качестве параметра компилятора заставляет его работать должным образом. Мне любопытно, почему я не получил предупреждения об этом от компилятора. - person branden_burger; 25.04.2013
comment
Если вы попытались запустить с включенной проверкой времени выполнения, вы должны получить сообщение об ошибке при назначении нераспределенному массиву. - person Vladimir F; 25.04.2013