Вызов процедур и использование модулей

Различают два вида процедур:

- Function – процедура-функция, вызываемая в выражении, например, p=имя_функции(аргументы), аргументы только входные с атрибутом intent(in); способы определения функции разнообразны – встроенные, операторные, внутренние, внешние, модульные, чистые, однако вызов любой из них аналогичен вызову простейшей встроенной функции max z = (x+y) / max(x,y);

- Subroutine – процедура-подпрограмма, вызываемая оператором вызова call имя(аргументы), аргументы входные –intent(in), выходные – intent(out), изменяющиеся – intent(inout).

Неисполняемый оператор использования модуля use имя_модуля пишут сразу после заголовка ПЕ. Любая ПЕ, как программа, так и другой модуль может использовать модуль, присоединяя общедоступные объекты с атрибутом public и делая доступными модульные процедуры.

Передача данных через аргументы процедуры.

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

Память под формальные аргументы, в том числе и под массивы, в процедуре не резервируется: из вызывающей программы передается адрес объекта, с которым работает процедура.

Возвращаемое значение функции связано с её именем и по форме может быть скаляром, вектором, матрицей, многомерным массивом, описываемым атрибутом dimension.

На аргументы процедур в связи с их назначением накладывается ряд ограничений:

1. формальные аргументы могут быть только переменными и массивами;

2. фактические аргументы, соответствующие входным формальным аргументам с атрибутом intent(in), могут быть:

- переменными, константами, выражениями,

- массивами, секциями массивов, элементами массивов,

- именами внешних или встроенных функций;

3. фактические аргументы, соответствующие формальным выходным аргументамс атрибутом intent(out)и изменяющимся аргументам с атрибутомintent(inout), могут быть только переменными, элементами массивов, массивами, секциями массивов.

Оператор Interface

В вызывающей ПЕ, а лучше в используемом модуле, для внешней процедуры пишут оператор interface, который описывает правила её вызова. Для модульных и внутренних процедур интерфейсы считаются явными и их описывать не надо. Оператор interface описывает:

- вид процедурыFunction илиSubroutine;

- имена и порядок следования формальных аргументов;

- формальный аргумент пишут с атрибутом intentназначение, имеющим одно из трёх значений: intent(in), intent(out), intent(inout).

Оператор interface– это самостоятельный составной оператор описания с локализованными внутри описаниями формальных аргументов

Interface

описание процедуры и её формальных аргументов

.. ..

описание процедуры и её формальных аргументов

End Interface

Особенностью оператора Interfaceявляется то, что вложенные в него описания процедур и их аргументов локализованы в каждой из процедур и независимы друг от друга и от описаний той программной единицы, где написан оператор интерфейса. До Фортрана-90 оператора интерфейса не было. Спрашивается, надо ли его описывать?
– Ответ не односложный:

1. для встроенных, внутренних и модульных процедур интерфейс считается явным, и его описывать не требуется;

2. интерфейс внешних процедур описывать рекомендуется - это помогает исключить ошибки вызова; рекомендуется собрать интерфейсы в модуле, а не дублировать их в вызывающих программах;

3. интерфейс нужно описывать или он должен быть явным:

- для процедур с необязательными и ключевыми аргументами,

- для функций с атрибутомdimension,

- длячистых (pure) функций и подпрограмм,

- в случае перегрузки типов, формы, операций и присваиваний.








Дата добавления: 2016-02-13; просмотров: 802;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.