Читайте также:
|
|
Программные единицы (главная программа, внешние процедуры и модули) могут содержать в себе внутренние процедуры. Внутренние процедуры собираются вместе в конце программного модуля после оператора CONTAINS. Программная единица "хозяйничает" (распоряжается) в любых процедурах, которые содержатся в ней. Внутренние процедуры не могут содержать внутри себя других внутренних процедур и не могут включать оператор CONTAINS.
Внутренние процедуры могут быть только вызванными своим хозяином и другими процедурами, внутренними для того же самого хозяина, не смотря на то, что внутренние процедуры могут вызывать другие процедуры (внешние или модуль). Например:
PROGRAM outer
REAL:: a, b, c
...
CALL inner(a)
...
CONTAINS
SUBROUTINE inner(a)! доступна только для outer
REAL:: a! передается как параметр
REAL:: b=1.0! переопределяется
c = a + b! c соотносится с хозяйской переменной
END SUBROUTINE inner
END PROGRAM outer
Программа outer содержит внутреннюю подпрограмму inner. Заметим, что переменные определены у единицы-хозяина и снова переопределены во внутренней подпрограмме. В примере, не смотря на то, что a, b и c определены в outer:
•Значение a передается как параметр, переопределяемая переменная (формальный параметр), также называемой a. Передаваемое значение то же самое, что и программе outer, переменные a в outer и inner это различные объекты
•Подобно a, переменная b переопределена в подпрограмме и также другой объект чем объект b в хозяйской программе. Значение переменной b не передается параметром и не соотносится с хозяином
•c есть единственный объект, общий для outer и inner, соотносится с хозяином.
В связи с правилами переопределения переменных во избежание ошибок полезно определять все переменные, используемые в процедуре.
Я
Внешние процедуры
Внешние процедуры содержатся в собственных программных единицах (подпрограммах или функциях), которые могут содержать (то есть иметь во владении) внутренние процедуры. Например:
PROGRAM first
REAL:: x
x = second()
...
END PROGRAM first
FUNCTION second()! внешняя
REAL:: second
...! не соотносится с хозяином
END FUNCTION second
Внешние процедуры не имеют хозяина и поэтому не могут разделять данные через соотнесение с хозяином. Передача данных с помощью параметров есть наиболее общий способ разделения данных с внешними процедурами. Внешние процедуры можно вызывать из всех других типов процедур.
Я
Дата добавления: 2015-11-14; просмотров: 63 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Использование модуля | | | Связь с хозяином (Host) - глобальные данные |