Использование содержит, интерфейс, модуль или отдельные подпрограммы?
Я написал некоторый код на Фортране, но не совсем понял, как структурировать более длинные коды.
Я часто хочу assumed-shape arrays
, Это представляется возможным при использовании interface block
, module
или contains
заявление. Однако наличие подпрограммы вне основного кода без использования любого из этих методов работает во многих случаях, но не для assumed-shape arrays
,
В каком контексте предпочтителен каждый из этих подходов и каковы основные отличия?
Каким образом переменные разделяются / наследуются в каждом подходе?
1 ответ
Интерфейсный блок - это дополнительная работа. Вы должны написать блок и пересмотреть его, когда процедура изменится. Интерфейсные блоки полезны для таких целей, как использование средств привязки ISO C для вызова подпрограммы языка C.
Недостаток подпрограммы в разделе "содержит" основной программы состоит в том, что все локальные переменные наследуются. Я думаю, что для процедур лучше быть более изолированными.
Модули делают процедуры более изолированными, а доступ к переменным более понятным, если только вы не используете чрезмерно переменные модуля. Кроме того, проще использовать процедуры из модулей в других программах.