как отсортировать намерение (вход), намерение (выход) и намерение (вход) в FORTRAN - PullRequest
3 голосов
/ 15 февраля 2012

Я изменяю старый исходный код, написанный на F77, до F90. Я страдаю от боли, чтобы разобраться, какая переменная является намерением (in), намерением (out) и намерением (inout).

Есть ли у вас какие-либо рекомендации или советы?

Любые мысли и предложения приветствуются.

Michael

Ответы [ 3 ]

5 голосов
/ 15 февраля 2012

intent (inout) всегда будет работать, если фактическим аргументом является переменная (см. Fortran intent (inout) против опущенного намерения ), но не предоставляет программисту и компилятору никакой информации.Также не требуется атрибут намерения, чтобы вы могли постепенно улучшать код.Если переменная появляется только в RHS операторов присваивания, то лучше всего использовать интент (in).Если только на LHS, то намерение (вне).Это становится более сложным, если переменная используется в качестве аргумента для одного или нескольких вызовов процедур, потому что тогда вы должны отслеживать использование в этой процедуре.Таким образом, проще всего, если вы начнете с процедур самого низкого уровня и продолжите свой путь.Большинство компиляторов предупреждают об ошибках, например, при назначении аргумента intent (in).Чтобы компилятор мог проверить согласованность процедур, интерфейс каждой вызываемой процедуры должен быть явным для вызывающей стороны.Самый простой способ сделать интерфейс известным - это поместить ваши процедуры в модуль или модули и «использовать» этот модуль.Интерфейсы являются явными между процедурами в одном модуле.

3 голосов
/ 15 февраля 2012

Алан Миллер написал программу to_f90.f90, которая автоматически решает эту проблему для правильно сформированного кода F77.Зеркало его сайта находится по адресу:

http://jblevins.org/mirror/amiller/

Конкретная процедура расположена по адресу:

http://jblevins.org/mirror/amiller/to_f90.f90

1 голос
/ 16 февраля 2012

Как уже говорилось ранее, намерение (inout) всегда должно работать.

Я предлагаю для намерения (в) и намерения (из) переменной X выполнить поиск (CTRL + F или любой другой) для "X =" и "X =" в вашей подпрограмме. Таким образом, вы сможете проверить, изменена ли переменная или нет во время выполнения этой подпрограммы. Если нет: намерение (в). Это всегда будет истинно, НО, если переменная изменяется в подфункции или при вызове другой подпрограммы. Поэтому прежде всего нужно проверить, выполняется ли вызов функции или подпрограммы в подпрограмме, которую вы переводите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...