Фортран: передача того же массива в качестве двух фиктивных аргументов подпрограмме

Предположим, у меня есть подпрограмма, которая принимает два массива в качестве входных данных. Один из них задано намерение (входящее), а другому задано намерение (выход). Второе извлекается из первого произвольным образом. Однако что, если я прохожу один и тот же фактический аргумент для обоих фиктивных аргументов? Как правило, результат не будет быть тем, что было задумано подпрограммой. См. Фрагмент кода ниже.

Проблема в том, что компилятор, похоже, не заботится, хотя я указал флаги намерения. Я использую Intel Visual Fortran Composer 12 со всей диагностикой. Есть ли лучший способ кодирования подпрограммы или какой-то другой параметр компилятора, который мне не хватает, чтобы сделать код более безопасным?

module foo

    contains

    subroutine sub_a()
        implicit none
        real::array(10,10)

        call sub_b(array,array)

    end subroutine

    subroutine sub_b(array1,array2)
        implicit none
        real,intent(in)::array1(10,10)
        real,intent(out)::array2(10,10)

        !array2 is derived from array1 somehow

    end subroutine

end module foo
6
задан bdforbes 22 August 2011 в 01:00
поделиться