Читайте также:
|
|
Одно из мощнейших как в использовании процедур так и представлении задачи сделать так, чтобы однажды написанная и протестированная процедура могла быть использованной и повторно использованой как только потребуется. (даже в другой программе).
Поскольку часто имеет место случай, когда программа может хотеть рассматривать массивы или символьные строки различного размера в одной и той же процедуре, Fortran 90 позволяет формальным параметры иметь размер переменных. Такие объекты могут вызывать объекты допустимого образа. Например:
SUBROUTINE sub2(data1, data3, str)
REAL, DIMENSION(:):: data1
INTEGER, DIMENSION(:,:,:):: data3
CHARACTER(len=*):: str
...
Формальные параметры data1 и data3 это массивы, которые могут быть объявлены с рангом, но без размера - задан двоеточием ':', использованным внутри спецификации размера по каждому измерению. Подобным образом, str имеет не явное задание длины и заимствует длину строки фактического параметра. Когда вызывается подпрограмма sub2, все три формальных параметра принимают размер им соответствующих фактических параметров; все три формальных параметра объекты допустимого образа.
Я
Вид параметра (атрибут INTENT)
Хорошим стилем программирования считается использование
указания компилятору, будет параметр входным или выходным с помощью атрибута INTENT
•только входным (вызываемым) -- INTENT(IN), означает, что формальный параметр ожидает значение при вызове процедуры, но не изменяется процедурой;
•выходным (присваиваемым после использования) -- INTENT(OUT), означает, что формальный параметр не имеет значения при вызове процедуры, но значение будет дано прежде, чем процедура будет завершена;
•и входным и выходным -- INTENT(INOUT) означает, что формальный параметр имеет начальное значение при вызове процедуры, и значение будет изменено процедурой.
SUBROUTINE example(arg1,arg2,arg3)
REAL, INTENT(IN):: arg1
INTEGER, INTENT(OUT):: arg2
CHARACTER, INTENT(INOUT):: arg3
REAL:: r
r = arg1*ICHAR(arg3)
arg2 = ANINT(r)
arg3 = CHAR(MOD(127,arg2))
END SUBROUTINE example
Другой пример:
SUBROUTINE invert(a, inverse, count)
REAL, INTENT(IN):: a
REAL, INTENT(OUT):: inverse
INTEGER, INTENT(INOUT):: count
inverse = 1/a
count = count+1
END SUBROUTINE invert
Подпрограмма invert имеет три формальных параметра: а используется в процедуре, но не меняется в ней, имеет атрибут INTENT(IN); inverse вычисляется в процедуре, имеет атрибут INTENT(OUT), и count (счетчик вызовов) увеличивается процедурой и требует атрибута INTENT (INOUT).
Использование атрибута INTENT рекомендуется, чтобы:
•позволить хорошему компилятору проверить ошибки кодирования,
•выполнить эффективно компиляцию и оптимизацию.
Дата добавления: 2015-11-14; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Связь с хозяином (Host) - глобальные данные | | | Процедуры в качестве параметров |