2016-09-30 4 views
1

Я написал код в Fortran, но не получил уверенности в том, как структурировать более длинные коды.Использование содержит, интерфейс, модуль или отдельные подпрограммы?

Я часто хочу assumed-shape arrays. Это представляется возможным при использовании interface block, a module или contains. Однако наличие подпрограммы вне основного кода без использования каких-либо из этих методов работает во многих случаях, но не для assumed-shape arrays.

В каком контексте предпочтительнее каждый из этих подходов, и каковы основные отличия?

Каким образом переменные разделяются/унаследованы в каждом подходе?

+0

Ваш последний вопрос - отдельная проблема, спросите об этом где-то еще. Но сначала найдите, там есть другие вопросы об этом. –

+0

Я снял этот последний вопрос. И да, ответы в «дубликате» были полезны! Но я не нашел его с ключевыми словами, которые я использовал. –

+0

Некоторый уровень дублирования хорош, потому что он помогает людям находить свои ответы в вопросе с разной формулировкой, поэтому не беспокойтесь. Дело в том, что бессмысленно просто копировать ответы на другой вопрос здесь. –

ответ

1

Интерфейсный блок - дополнительная работа. Вы должны написать блок и пересмотреть его при изменении процедуры. Интерфейсные блоки полезны для таких целей, как использование средств привязки ISO C для вызова подпрограммы языка C.

Наличие подпрограммы под «содержит» в основной программе имеет тот недостаток, что все локальные переменные наследуются. Я думаю, что лучше для процедур быть более изолированными.

Модули делают процедуры более изолированными, а доступ переменных более ясен - если вы не используете чрезмерное использование переменных модуля. Кроме того, проще использовать процедуры из модулей в других программах.

+0

Итак, подпрограммы после оператора 'contains' не наследуют переменные друг от друга? И я мог бы безопасно использовать перекрывающиеся наборы имен переменных в подпрограммах в том же блоке 'contains', будь то в основном коде или в модуле? Или, например, наследодатель наследует от вызывающей подпрограммы? –

+0

Если вы должны отвечать в основном теми же словами, что и в ответе, это указывает на то, что это, вероятно, дубликат. –