Справочное руководство по языку Fortran 95

перевод Балуева А. Н.

Оглавление

Глава 1. Элементы Fortran

Редактирование ввода/вывода

В начало страницы

Fortran обеспечивает много средств для форматирования или редактирования данных. Оно может быть явным, с использованием форматных спецификаций; или неявным, с использованием списочного (list-directed) ввода/вывода, в котором данные редактируются в предопределенном формате (см. "Списочное форматирование" на стр. 30).
Спецификация формата есть по умолчанию выражение типа CHARACTER и может фигурировать

  • непосредственно как FMT= указательное значение.
  • в операторе FORMAT, метка которого есть FMT= указательное значение.
  • в операторе FORMAT, метка которого была присвоена скалярной по умолчанию переменной в указателе FMT= .
Синтаксис указателя формата есть
  ( [ format-items ] )
где format-items содержит редактирующую информацию в форме редактирующих дескрипторов. См. "Оператор FORMAT" на стр. 128 для детализации синтаксиса.

Управление форматом

Форматные спецификации и единицы, указанные в списке ввода/вывода в операторах RED, WRITE или PRINT, сопоставляются друг другу в порядке слева направо. Каждый эффективный дескриптор редактирования применяется к соответствующему объекту в списке ввода/вывода. При этом каждый экземпляр повторенного дескриптора считается самостоятельным эффективным дескриптором. Три исключения из этого правила таковы:

  1. единица типа COMPLEX в списке ввода/вывода требует интерпретации двух F, E, EN, ES, D или G редактирующих дескрипторов.
  2. Управляющие и редактирующие символьные цепочки дескрипторы не ставятся в соответствие единицам в списке ввода/вывода.
  3. Если достигнут конец полного формата, а единицы в списке ввода/вывода не исчерпаны, управление форматом возвращается к началу форматирующей единицы, соответствующей последней из предшествующих правых скобок, если такая существует, а в противном случае к началу формата. Если управление форматом возвращается к скобке, перед которой стоит спецификация, эта же спецификация используется опять.

Дескрипторы редактирования данных

Дескрипторы редактирования данных управляют конверсией данных в или из их внутреннего представления .

Численное редактирование

Дескрипторы редактирования I, B, O, Z, Q, F, E, EN, ES, D, and G могут использоваться при управлении вводом/выводом данных типов INTEGER, REAL и COMPLEX согласно следующим общим правилам:

  • при вводе ведущие пробелы безразличны,
  • при выводе представление выравнивается по правому краю поля,
  • при выводе, если количество выводимых знаков превышает ширину поля, все поле заполняется звездочками.

Редактирование целых (I, B, O и Z)

Дескрипторы Iw.m, Bw, Bw.m, Ow, Ow.m, Zw, and Zw.m определяют характер редактирования для данных вида INTEGER. Буква w указывает ширину поля при вводе, включая знак (если он есть). Буква m указывает минимальное количество цифр при выводе; m не должно превышать w, если w не есть 0. При выводе ширина пополняется пробелами, если число уже поля и при условии, что w не равно 0. Если w есть 0, то используется ширина, достаточная для размещения всех знаков без дополнительных пробелов. Отметим, что при выводе ширина всегда должна быть указана.

Редактирование чисел REAL (Q, F, D, and E)

Дескрипторы Qw.d, Fw.d, Ew.d, Dw.d, Ew.dEe, EN и ES определяют редактирование данных REAL и COMPLEX.
Редактирование с Q, F, D, E, EN и ES аналогично вводу. w указывает ширину поля; d указывает количество цифр в дробной части. Поле состоит из необязательного знака, за которым следует одна или более цифр, среди которых может быть десятичная точка. Если точка отсутствует, самые правые d цифр рассматриваются как дробная часть. Экспонента может быть включена в одной из следующих форм:

  • константа INTEGER, снабженная знаком.
  • Q, E или D, за которым следует константа INTEGER с необязательным знаком.
При редактировании F поле вывода содержит 0 или более пробелов, за которыми следует знак минус или возможный знак плюс (см. редактирование S, SP и SS), и далее одна или более цифр с десятичной точкой, представляющие модуль. Поле модифицируется установкой масштабного множителя (см. редактирование P) и округляется до d десятичных цифр. Если w есть ноль, то используется подходящее поле для размещения всех цифр и знака без дополнительных пробелов. При редактировании Q, E и D поле вывода содержит следующие по порядку части:
  1. ноль или более пробелов
  2. минус или возможный плюс (см. редактирование S, SP и SS) ноль (в зависимости от масштабного множителя, см. редактирование P)
  3. десятичную точку
  4. d самых старших цифр, округленных
  5. Q, E или D
  6. знак плюс или минус
  7. экспоненту из e цифр, если используется расширенная Ew.dEe форма, или из двух цифр в противном случае.
При редактировании с Q, E и D масштабный множитель k управляет позицией десятичной точки.
Если -d < k <= 0, поле вывода содержит точно k ведущих нулей и d - k значащих цифр после десятичной точки.
Если 0 < k < d + 2 , то поле вывода содержит точно k значащих цифр слева от десятичной точки
и d - k + 1 значащих цифр справа от десятичной точки. Другие значения k недопустимы.

Редактирование с EN

Дескриптор EN выдает выходное поле в инженерном обозначении, так что десятичная экспонента делится на три и абсолютное значение мантиссы есть больше или равно 1 и меньше чем 1000, за исключением случая нуля. Масштабный множитель не влияет на вывод. Формы редактирующего дескриптора есть ENw.d и ENw.dEe для указания того, что внешнее поле занимает w позиций, с дробной частью из d цифр и экспоненциальной частью из e цифр.
При вводе EN действует так же как дескриптор F.

Редактирование ES

Дескриптор редактирования ES выдает поле вывода в форме вещественного числа в научном обозначении, так что абсолютное значение мантиссы больше или равно 1 меньше 10 , за исключением нулевого вывода. Масштабный множитель на вывод не влияет. Формы редактирующего дескриптора ESw.d и ESw.dEe показывают, что выводимое поле занимает w позиций с дробной частью d цифр и экспоненциальной частью e цифр. При вводе редактирование ES такое же как редактирование F.

Редактирование COMPLEX

Редактирование данных типа COMPLEX производится употреблением двух редактирующих дескрипторов типа REAL. Первый из них относится к вещественной части, второй определяет мнимую часть. Эти дескрипторы могут быть различными. Управляющие дескрипторы редактирования могут обрабатываться между редактирующими дескрипторами для вещественной части и для мнимой части. Дескрипторы редактирования цепочек символов могут обрабатываться между двумя редактирующими дескрипторами только при выводе.

Редактирование данных типа LOGICAL (L)

Дескриптор редактирования Lw указывает, что поле занимает w позиций. Указываемый список единиц ввода/вывода должен быть типа LOGICAL. Поле ввода состоит из возможных пробелов, после которых возможна десятичная точка и вслед за ней T для true или F для false. За T или F могут следовать в поле дополнительные символы. Заметим, что логические константы .TRUE. и .FALSE. -- допустимые формы ввода. Если процессор воспринимает представление букв в обоих регистрах, верхнем и нижнем, буквы нижнего регистра эквивалентны буквам верхнего регистра в поле ввода типа LOGICAL. Поле вывода состоит из w - 1 пробела, за которыми следуют T или F в зависимости от значения внутреннего объекта данных.

Редактирование данных типа CHARACTER (A)

Редактирующий дескриптор A[w] используется со списком единиц ввода/вывода типа CHARACTER. Если вместе с A не указана ширина поля w, количество знаков в поле вывода совпадает с длиной единицы вывода. Пусть len есть длина единицы в списке. При вводе, если w больше или равна len, то самые правые len символов будут взяты из поля; если w меньше, чем len, w символов выравниваются по левому краю и к ним добавятся справа len-w пробелов. При выводе к единице из списка добавляются ведущие пробелы, если w больше чем len. Если w есть меньше или равно len, выводимое поле состоит из w левых символов единицы из списка.

Обобщенное редактирование (G)

Редактирующие дескрипторы Gw.d и Gw.dEe могут использоваться со списком единиц ввода/вывода любого встроенного типа. Эти дескрипторы указывают, что внешнее поле занимает w позиций и дробная часть в нем состоит максимум из d цифр, а экспоненциальная часть из e цифр. d и e не имеют значения при использовании с данными INTEGER, LOGICAL или CHARACTER.

Обобщенное целое редактирование

С данными типа INTEGER дескрипторы Gw.d и Gw.dEe действуют по правилам для редактирования с Iw.

Обобщенное редактирование Real и Complex

Форма и интерпретация поля ввода такие же как для редактирования F. Метод представления в поле вывода зависит от величины объекта редактируемых данных. Если десятичная точка находится перед, внутри или сразу после d печатаемых значащих цифр, то вывод выглядит так же как для дескриптора F; в противном случае редактирование проводится как для дескриптора E. Заметим, что масштабный множитель k (см. "P редактирование" на стр. 29) не действует, когда величина редактируемого объекта данных не лежит вне диапазона, в котором возможно эффективное использование редактирования F.

Обобщенное логическое редактирование

С данными типа LOGICAL дескрипторы Gw.d и Gw.dEe действуют по правилам для дескриптора Lw.

Обобщенное редактирование символьных данных.

С данными типа CHARACTER дескрипторы Gw.d и Gw.dEe действуют по правилам для дескриптора Aw.

Дескрипторы управления редактированием

Управляющие дескрипторы редактирования воздействуют на форматный контроль или на конверсии, производимые следующими за ними дескрипторами редактирования данных.

Позиционное редактирование (T, TL, TR, and X)

Дескрипторы Tn, TLn, TRn, и nX управляют позицией символа в текущей записи, к которой или из которой будет передан следующий символ. Новая позиция может располагаться в любом направлении от текущей позиции. Это дает возможность ввода той же самой записи дважды и, возможно, с другим редактированием. Это также позволяет убирать символы из записи. Редактирующий дескриптор Tn устанавливает табуляцию на позицию n от начала записи. Дескрипторы TLn и TRn устанавливают табуляцию через n символов от текущей позиции соответственно влево или вправо. Дескриптор nX табулирует n символов справа от текущей позиции. Если позиция меняется за пределы текущей записи, следующие данные передаются к или от записи, приводя к вставкам пробелов в незаполненные ранее позиции.

Редактирование с помощью слешей

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

Редактирование двоеточием

Дескриптор-двоеточие прекращает контроль формата, если не осталось больше членов в списке ввода/вывода. Дескриптор-двоеточие не действует, если в списке ввода /вывода имеется больше членов.

Редактирование с S, SP, и SS

Дескрипторы S, SP, и SS следят за тем, должен ли необязательный плюс быть передан в очередное численное поле вывода. SP заставляет передать необязательный плюс. SS побуждает не передавать его. S возвращает необязательные плюсы к обработке по умолчанию (без плюсов)

P редактирование

Редактирующий дескриптор kP устанавливает значение масштабного множителя на k. Масштабный множитель действует при редактировании по Q, F, E, EN, ES, D или G соответствующих численных величин следующим образом:

  • При вводе (при условии что экспонент в поле нет) масштабный множитель делает число во внешнем представлении равным внутренне представленному числу, умноженному на 10 в степени k. Масштабный множитель не действует, если в поле присутствует экспонента.
  • При выводе с редактированием по E или D, значащая часть величины, которая будет выдана, умножается на 10 в степени k, а экспонента уменьшается на к.
  • При выводе с редактированием G, эффект масштабного множителя отсутствует, если величина данных не выходит за пределы диапазона, который допускает употребление редактирования F. Если требуется редактирование в форме E, масштабный множитель имеет тот же эффект, как при выходном редактировании E.
  • При выводе, при редактировании с EN и ES, масштабный множитель не имеет эффекта.
  • При выводе с редактированием F эффект масштабного множителя состоит в том, что представленное на вывод число равно внутреннему представлению, умноженному на 10 в степени k.

Редактирование BN и BZ

Дескрипторы редактирования BN и BZ используются для указания интерпретации не ведущих пробелов в соответствующих числовых полях ввода. Если в формате фигурирует дескриптор BN, пробелы в последующих числовых полях ввода игнорируются. А если там стоит BZ, пробелы в соответствующих полях трактуются как нули.

Дескрипторы редактирования символьных цепочек

Дескрипторы редактирования символьных цепочек действуют при выводе данных типа CHARACTER. Они не должны использоваться при вводе.

Редактирование цепочек CHARACTER

Дескрипторы редактирования цепочек CHARACTER выводят символы цепочки, включая и пробелы. Граничные символы могут быть и кавычками и апострофами. Эти дескрипторы считают шириной поля количество внутренних символов, не включая в это число ограничивающие символы. В пределах поля два последовательные краевые символа (апострофы, если цепочка заключена в апострофы, или кавычки, если цепочка ограничена кавычками) рассматриваются как один знак. Таким образом, апостроф или кавычка может быть выведена как часть цепочки CHARACTER, ограниченной теми же символами.

Редактирование H (устаревшее)

Дескриптор cH побуждает записывать символьную информацию со следующих c символов (включая пробелы), расположенных после H дескриптора cH в самом списке форматных единиц.
Символы c называются константами Hollerith.

Форматирование, управляемое списком

Такое форматирование указано, когда оператор ввода/вывода использует звездочку вместо явного формата. Например:
  read*, a
  print*, x,y,z
  read (unit=1, fmt=*) i,j,k
все используют управляемое списком форматирование.

Управляемый списком ввод

Записи управляющего списка представляют последовательность значений и их разделителей. Значения --- или нули или имеют вид:   c
  r*c
  r*
Где:
c есть литеральная константа, цепочка CHARACTER без ограничивающих символов.
r есть положительная литеральная константа типа INTEGER без указания параметра разновидности.
r*c есть эквивалент последовательности r экземпляров c.

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

Таблица 4: Управляемое списком редактирование ввода

ТИПРЕДАКТИРОВАНИЕ
INTEGERI
REALF
COMPLEXКак для литеральной константы COMPLEX
LOGICALL
CHARACTERКак для цепочки CHARACTER. Цепочка CHARACTER может быть продолжена из одной записи к следующей. Граничные апострофы или кавычки не требуются, если цепочка CHARACTER не пересекает границу записи и не содержит значений разделителей или ограничителей цепочки CHARACTER и не начинается с r*.

Управляемый списком вывод

Для управляемого списком вывода применяется следующее форматирование:

Таблица 5: Управляемое списком редактирование

ТИПРедактирование
INTEGERGw
REALGw.d
COMPLEX(Gw.d, Gw.d)
LOGICALT для знач. true и F для знач. false
CHARACTERКак цепочка CHARACTER, за исключением подавления с DELIM= спецификатор

Форматирование по списку имен

Форматирование по списку имен указывается оператором ввода /вывода с NML= спецификатор. Ввод и вывод со списком имен может содержать:

  1. возможные пробелы
  2. знак амперсанта, за которым непосредственно следует групповое имя из списка оператора ввода/вывода
  3. один или более пробелов
  4. последовательность из нуля или более подпоследовательностей имя-значение
  5. слеш, указывающий конец записей списка имен.
    Символы в таких записях формируют последовательность подпоследовательностей имя-значение. Каждая подпоследовательность имя-значение есть объект данных или подобъект, объявленный ранее в операторе NAMELIST как часть группы в списке имен, за которой идет равенство, а за ним одно или более значений и разделителей значений. Форматирование записей происходит так же, как для записей, управляемых списком.
Пример:
                         integer :: i,j(10)
                         real :: n(5)
                         namelist /my_namelist/ i,j,n
                         read(*,nml=my_namelist)
 Если входные записи таковы:
                         &my_namelist i=5, n(3)=4.5,
                         j(1:4)=4*0/

то  5 поступает в  i, 4.5 -- в  n(3), а  0 -- в элементы от 1 до 4 в j.

Операторы

В начало страницы

Приведем теперь краткое описание каждого оператора. Полный синтаксис и правила исполнения см. в Главе 2, "Алфавитный перечень."
Операторы Fortran могут быть рассортированы по 5 категориям. Это:

  • Управляющие операторы
  • Операторы спецификации
  • Операторы ввода/вывода
  • Операторы присваивания и отведения памяти
  • Операторы структурирования программы

Управляющие операторы

Арифметическое IF (устаревшее)
Выполнение оператора арифметического IF сводится к вычислению выражения с последующей передачей управления. Управление передается оператору, помеченному первой, второй или третьей меткой, перечисленными в операторе арифметического IF в зависимости от того, будет ли вычисленное значение меньше нуля, равно нулю или больше нуля соответственно.
Присваиваемое GOTO (устаревшее)
Присваиваемое GOTO передает управление помеченному оператору с меткой, указанной переменной, получившей значение метки в операторе присваивания. Если указан список меток в скобках, переменная должна иметь значением одну из этих меток.
CALL
Оператор CALL вызывает подпрограмму и передает ей список аргументов.
CASE
Выполнение оператора SELECT CASE сводится к вычислению выражения в операторе, значение которого называется case index. Если значение case index лежит в диапазоне, который определяет case selector оператора CASE, выполняется блок (если он есть), следующий за оператором CASE.
Вычисляемое GOTO
Этот оператор передает управление одному из списка помеченных операторов.
CONTINUE
Выполнение оператора CONTINUE не производит никакого действия.
CYCLE
Оператор CYCLE урезает исполнение одной итерации цикла DO.
DO
Оператор DO возглавляет конструкт DO. Конструкт DO обеспечивает многократное исполнение (loop) последовательности исполнимых операторов или конструктов.
ELSE IF
Этот оператор управляет условным исполнением вложенных блоков IF в составе конструкта IF, когда предыдущие IF-выражения оказались ложными.
ELSE
Оператор ELSE контролирует условное исполнение блока кода в конструкте IF, когда все предыдущие IF-выражения оказались ложными.
ELSEWHERE
Оператор ELSEWHERE управляет условным исполнением блока операторов присваиваний для элементов массива, для которых маскировочное выражение конструкта WHERE имеет значение false.
END DO
Этот оператор заключает конструкт DO.
END FORALL
Оператор END FORALL завершает конструкт FORALL
END IF
Означает конец конструкта IF.
END SELECT
Заканчивает конструкт CASE.
END WHERE
Оператор заканчивает конструкт WHERE.
ENTRY
Оператор ENTRY позволяет программной единице определять кратные процедуры, каждая со своей точкой входа.
EXIT
Оператор прекращает выполнение DO loop.
FORALL
Оператор служит началом конструкта FORALL. Этот конструкт управляет кратными присваиваниями, замаскированным массивом присваиваний (WHERE) и вложенными конструктами и операторами в FORALL.
GOTO
Передает управление помеченному оператору.
IF
Оператор IF определяет, выполнять или нет отдельный выполнимый оператор.
IF-THEN
Оператор служит началом конструкта IF.
PAUSE (старевшее)
Задерживает на время исполнение программы.
RETURN
Оператор RETURN завершает выполнение подпрограммы или функции и возвращает управление оператору, следующему за вызовом процедуры.
SELECT CASE
Стоит в начале конструкта CASE. Содержит выражение, значение которого определяет case index. Этот индекс используется в конструкте для определения, какой блок конструкта (или никакой) нужно исполнять.
STOP
Прекращает исполнение программы.
WHERE
Оператор WHERE используется для маскировки присваивания значений в массиве операторов присваивания. Оператор WHERE может служить началом конструкта WHERE, содержащего 0 или более операторов присваивания или может сам содержать одно присваивание.

Операторы спецификации

ALLOCATABLE
Оператор объявляет размещаемые массивы. Форма размещаемого массива определяется, когда оператор ALLOCATE отводит для него место в памяти.
CHARACTER
Оператор объявляет объекты данных типа CHARACTER.
COMMON
The COMMON обеспечивает глобальные возможности данных. Он указывает блоки физической памяти, называемые блоками common (общий) , которые могут быть доступными любой действующей единице в выполняемой программе.
COMPLEX
Оператор COMPLEX объявляет имена типа COMPLEX.
DATA
Оператор придает начальные значения переменным. Он не является выполняемым оператором.
Оператор определения производного типа.
Такие операторы возглавляют определения определяемых пользователем типов.
DIMENSION
Указывает форму массива.
DLL_EXPORT (только в Windows)
Оператор DLLEXPORT объявляет создание DLL.
DLL_IMPORT (только в Window)
Объявляет употребление DLL.
DOUBLE PRECISION
Оператор объявляет имена типа double precision REAL.
EQUIVALENCE
Оператор EQUIVALENCE предписывает разместить в одном участке памяти программной единицы два или более объектов.
EXTERNAL
Оператор EXTERNAL указывает внешние процедуры. Имена таких процедур можно использовать в качестве фактических аргументов.
IMPLICIT
Оператор IMPLICIT определяет в рамках программной единицы тип и ,возможно, разновидность длины CHARACTER для имен, начинающихся с указанной в операторе буквы. Альтернативно, он может указывать, что в данной программной единице нет неявного определения типа.
INTEGER
Оператор объявляет имена типа INTEGER.
INTENT
Оператор указывает преднамеренное использование фиктивного аргумента.
INTRINSIC
Оператор указывает список имен встроенных процедур. Это позволяет использовать имена встроенных процедур в качестве фактических аргументов.
LOGICAL
Объявляет имена типа LOGICAL.
NAMELIST
Оператор NAMELIST указывает список имен переменных, ссылка на которые приводит к к вводу/выводу их значений.
MODULE PROCEDURE
Оператор MODULE PROCEDURE указывает, что перечисленные в нем имена есть часть обобщенного (generic) интерфейса.
OPTIONAL
Оператор OPTIONAL сообщает, что перечисленные в нем пустые аргументы не обязательно замещать фактическими при вызове процедуры.
PARAMETER
Оператор PARAMETER перечисляет именованные константы.
POINTER
Оператор содержит список переменных, имеющих атрибут POINTER.
PRIVATE
Оператор PRIVATE перечисляет имена объектов, доступных только из пределов текущего модуля.
PUBLIC
Указывает имена объектов, доступных везде, где используется модуль, содержащий рассматриваемый оператор PUBLIC.
REAL
Объявляет имена типа REAL.
SAVE
Указывает, что перечисленные в операторе объекты сохраняют свои связи, место в памяти, определения и значения после выполнения операторов RETURN или END в подпрограмме.
SEQUENCE
Оператор может появиться только в определении производного типа. Он указывает, что компоненты определяемого типа размещаются в памяти в порядке их определения. TARGET
Оператор указывает список имен объектов, которые имеют атрибут target и поэтому могут ассоциироваться с указателями.
TYPE
Указывает, что все перечисленные в операторе объекты имеют указанный в операторе производный тип.
USE
Оператор USE сообщает, что указанный модуль доступен для текущей программной единицы. Он также обеспечивает средства переименования или ограничения доступа к объектам в этом модуле.

Операторы ввода/вывода

BACKSPACE
Оператор устанавливает файл в позицию начала текущей записи, если она есть, или перед началом предыдущей записи.
CLOSE
Прекращает связь указанной единицы ввода/вывода с внешним файлом.
ENDFILE
Оператор ENDFILE вписывает запись endfile в качестве следующей записи в файле. Затем файл устанавливается в позицию после этой записи, которая становится его последней записью.
FORMAT
Оператор FORMAT содержит явную информацию, обеспечивающую редактирование между внутренним представлением данных и символами на вводе или выводе.
INQUIRE
Оператор позволяет программе справляться о наличии файлов, связей, методов доступа или других объектов.
OPEN
Оператор связывает или пересоединяет внешний файл с некоторым устройством ввода/вывода.
PRINT
Оператор PRINT передает значения из выходного списка на устройство ввода/вывода.
READ
Оператор READ передает значения с устройства ввода/вывода в объекты, указанные в списке ввода или в группе namelist.
REWIND
Этот оператор устанавливает указанный файл в его начальную точку.
WRITE
Оператор WRITE передает на устройство ввода/вывода значения из объектов, указанных в списке вывода или в группе namelist.

Операторы присваивания и размещение в памяти

ALLOCATE
Оператор ALLOCATE определяет границы измерений размещаемых массивов и отводит память для массивов этой категории.
Для указателей оператор ALLOCATE создает объект, который неявно получает атрибут TARGET, и связывает указатель с этим объектом-назначением.
ASSIGN (устаревшее)
Присваивает метку оператора переменной типа INTEGER.
ASSIGNMENT
Присваивает значение выражения справа от знака равенства переменной, расположенной слева от знака равенства.
DEALLOCATE
Оператор DEALLOCATE освобождает память, занятую размещаемыми массивами и назначениями указателей и отсоединяет (disassociates) указатели.
NULLIFY
Оператор NULLIFY отсоединяет (disassociates) указатели.
Pointer Assignment
Оператор присваивания указателю связывает (associates) указатель с назначением (target).

Операторы структурирования программы

BLOCK DATA
Оператор BLOCK DATA начинает блок данных программной единицы.
CONTAINS
Оператор CONTAINS отделяет тело главной программы, модуля или подпрограммы от внутренних или модульных подпрограмм, которые тело содержит.
END
Оператор END заканчивает программную единицу, модульную подпрограмму, интерфейс или внутреннюю подпрограмму.
FUNCTION
Оператор FUNCTION возглавляет подпрограмму функции и указывает тип и имя возвращаемого значения (по умолчанию это имя функции), имена ее фиктивных аргументов и то, является ли она рекурсивной функцией.
INTERFACE
Оператор INTERFACE возглавляет блок интерфейса. Этот блок указывает формы обращения к процедуре для ее вызова. Блок интерфейса может использоваться для спецификации интерфейса процедуры, определяемого оператора или определяемого присваивания.
MODULE
Оператор MODULE возглавляет программную единицу, называемую модулем.
PROGRAM
Оператор PROGRAM определяет имя главной программы.
Statement Function
Оператор-функция есть функция, определенная одним оператором.
SUBROUTINE
Оператор SUBROUTINE начинает подпрограмму общего вида и указывает имена ее формальных аргументов и то, является ли она рекурсивной.

Порядок расположения операторов в программе

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

  • использующие операторы должны располагаться после объявляющих;
  • специфицирующие операторы должны располагаться раньше исполнимых, но операторы FORMAT, DATA и ENTRY могут располагаться среди исполнимых;
  • процедурные модули и внутренние процедуры должны располагаться вслед за оператором CONTAINS.
Правила расположения операторов суммируются в следующей таблице.
Вертикальные линии разделяют операторы, которые могут перемежаться.
Горизонтальные линии разделяют операторы, которые не могут перемежаться.

Таблица 6: Порядок операторов

операторы PROGRAM, FUNCTION, SUBROUTINE, MODULE,или BLOCK DATA
операторы USE
операторы FORMAT и ENTRY IMPLICIT нет
операторы PARAMETER операторы IMPLICIT
операторы PRAMETER и DATA определения произв. типов,блоки интерфейса,операторы объявления типа, операторы операторов-функций и операторы спецификаций
операторы DATA исполнимые операторы
операторы CONTAINS
внутренние подпрограммы или подпрограммы-модули
операторы END

На операторы наложены ограничения относительно из появления в определенных единицах видимости (см. "Область действия " на стр.57). Ограничения сводятся к следующим:

  • Оператор ENTRY может появляться только во внешних подпрограммах или в подпрогаммах-модулях.
  • Оператор USE не может появиться в программной единице BLOCK DATA.
  • Оператор FORMAT не может появиться в модульной единице видимости, в BLOCK DATA программной единицы или в теле интерфейса.
  • Оператор DATA не может появиться в теле интерфейса.
  • Определение производного типа не может располагаться в BLOCK DATA программной единицы.
  • Блок интерфейса не может располагаться в BLOCK DATA программной единицы.
  • Оператор-функция не может появиться в модульной единице видимости, в BLOCK DATA программной единицы или в теле интерфейса.
  • Исполнимый оператор не может входить в модульную единицу видимости, в программную единицу BLOCK DATA или в тело интерфейса.
  • Оператор CONTAINS не может появиться в программной единице BLOCK DATA, во внутренней подпрограмме или теле интерфейса.

Исполнимые конструкторы

В начало страницы

Исполнимые конструкты управляют выполнением блоков операторов вложенных конструктов.

  • Конструкты CASE и IF определяют, будет ли некий блок исполняться (см. "Конструт CASE" на стр. 79 и "Конструкт IF" на стр. 138).
  • Конструкт DO определяет, сколько раз повторится выполнение блока (см. "Конструкт DO" на стр. 106).
  • Конструкт FORALL управляет кратными присваиваниями, маскированными массивами (WHERE) присваиваний и вложенными конструктами FORALL и операторами (см. "Конструкт FORALL" на стр. 126).
  • Конструкт WHERE определяет, на какие элементы массива будет действовать блок операторов присваивания (см. "Конструкт WHERE" на стр. 234).

Имена конструктов

Необязательные имена конструктов могут использоваться с CASE, IF, DO и FORALL конструктами. Употребление имен конструктов может сделать программу понятнее. Для конструкта DO, имена конструктов задействуют операторы CYCLE или EXIT для выхода с уровня вложенности DO, отличного от текущего уровня. Все имена конструктов должны соответствовать данному конструкту. Например, если оператор SELECT CASE имеет имя конструкта, то соответствующие операторы CASE и END SELECT должны иметь то же самое имя конструкта.


<<< Оглавление Страницы:  4   5 >>>