next up previous contents
След.: Неявная типизация Выше: Объекты данных Пред.: Терминология   Содержание


Объявление данных

Объекты данных могут иметь и другие атрибуты, некоторые из которых -- общие, а иные -- специфичны, например, для аргументов процедур. Все объекты данных должны быть объявлены с указанием имени, типа и атрибутов, за исключением безымянных констант и некомассивных скалярных переменных (при условии, что не запрещено неявное определение типа этих переменных).

Объявление объектов данных состоит из задания типа, атрибутов, имени объекта и, при необходимости, указания дополнительной информации. Это может быть размерность массива, коразмерность комассива, границы массива, кограницы комассива, длина объекта символьного типа и т.п. Простейшее объявление выглядит так:

тип имя

или

тип:: имя

Имен может быть более одного -- через запятую. Атрибуты можно назначать одноименными операторами, например:

INTEGER A

DIMENSION(6) A

TARGET A

Здесь объект A -- целочисленный массив ранга один, размера шесть, и он может быть целью некоторого указателя. Есть возможность перечислить все атрибуты в одном операторе объявления:

INTEGER, DIMENSION(6), TARGET:: A

Возможна инициализация, например

INTEGER:: YEAR = 365, LEAPY = 366

Можно инициализировать и одномерные массивы с помощью конструктора массива (см. далее), и даже многомерные с помощью конструкторов и функции RESHAPE. Впрочем, необходимость в этом бывает не часто.

Атрибут PARAMETER задает, как уже было сказано, именованную константу; разумеется, обязательна инициализация. Например: REAL, PARAMETER:: pi = 3.14

SAVE -- атрибут устойчивых данных, которые сохраняют свое значение при выходе из процедуры (см. §11), например. Локальные переменные (программной единицы, процедуры, блока BLOCK) с этим атрибутом сохраняют свой статус связанности (если они -- указатели), размещенности (если они -- размещаемые) и определенности, а также свое значение после выхода из программной единицы или процедуры (после END или RETURN). Исключение составляют указатели, если связанный с ними объект становится неопределенным. Помимо переменных, атрибут может назначаться COMMON-блокам (см. §12.3) и указателям на процедуры(см. §11.5). Не может быть назначен формальным аргументам процедур, результату функции, автоматическим объектам (см. §11.2). В основной программной единице смысла не имеет, хотя может присутствовать. Следует иметь в виду случаи, когда атрибут SAVE назначается по умолчанию: при инициализации данных, как в операторах объявления, так и с помощью оператора DATA, а также всем данным, объявляемым в описательной части модулей, подмодулей и основной программы (новшество Fortran-2008).

Приведем несколько примеров объявлений.

INTEGER, DIMENSION(5), PARAMETER:: ODDS = [1,3,5,7,9]

REAL, CODIMENSION[*]:: INTEGRAL

REAL, ALLOCATABLE, DIMENSION(:), CODIMENSION[:]:: GRID

DOUBLE PRECISION, TARGET, DIMENSION(3,3):: Sh, M, A

REAL, POINTER:: P1, P2 => NULL(), P3

Примеры объявлений процедур -- в соответствующем параграфе.



Ilya A. Chernov 2012-12-19
X