next up previous contents
След.: Стандартные процедуры и модули Выше: Модули Пред.: Области видимости и связь   Содержание


Оператор COMMON и блоки данных

Говоря о модулях, упомянем три другие возможности объявления глобальных данных. Для небольших программ можно реализовать все процедуры как внутренние в основной программе. Технически это означает, что они отделены от текста основной программы оператором CONTAINS, но расположены до END. При этом им доступны все объявления основной программы (посредством связи по вложенности). Злоупотреблять такой «вседозволенностью» не рекомендуется.

Для объявления именованных констант и типов можно использовать оператор INCLUDE, вынеся все объявления в отдельный файл. Разумеется, это эквивалентно объявлению констант и типов в каждой области видимости, разве что проще для программиста.

Классикой старого Фортрана, поддерживаемой для совместимости, являются общие блоки. Оператор COMMON описывает области памяти, доступные разным программным единицам. Он широко использовался для объявления глобальных данных. В современном Фортране для этой цели лучше использовать модули. Тем не менее, велика вероятность встретить общие блоки при работе с чужим кодом.

Синтаксис: COMMON [имя] /список объектов/

Неименованный блок может быть только один. Список объектов -- идентификаторы скаляров и массивов через запятую. Объявленные одинаково одноименные блоки в разных программных единицах определяют набор объектов, доступных этим единицам. Имеется возможность определять одноименные блоки с разными объектами в разных программных единицах, что приводит к связи по памяти. Например, массив из трех элементов в одной единице в другой мог быть представлен тремя скалярами. Эта возможность относится к категории «детских болезней» языка: в эпоху, когда ресурсы памяти были весьма ограничены, подобные трюки были полезны. Ныне эта возможность является опасной и нерекомендуемой, так как чревата трудноуловимыми ошибками и очень плохо сопровождается. Для инициализации объектов именованных общих блоков предназначены специальные программные единицы -- блоки данных.

Блок данных объявляется заголовком BLOCK DATA [имя] и завершается END [BLOCK DATA [имя]]. Имя не играет роли, как и имя основной программы, и служит целям документирования и удобства. Тело блока может содержать только определения производных типов, операторы объявления данных (назначения типа, DIMENSION, PARAMETER, POINTER, TARGET, SAVE, ASYNCHRONOUS, VOLATILE и BIND), объявления и инициализацию общих блоков (COMMON и DATA) и операторы IMPLICIT и INTRINSIC.



Ilya A. Chernov 2012-12-19
X