Составители:
Рубрика:
PRINT *, 'ВНЕШНЯЯ ПРОЦЕДУРА:'
CALL TEST()
PRINT *, 'ВНУТРЕННЯЯ ПРОЦЕДУРА:'
CALL VNUTR_TEST()
CONTAINS
SUBROUTINE VNUTR_TEST
PRINT *,'X=', X, 'ДОСТУПЕН'
PRINT *,'Z=', Z, 'ДОСТУПЕН'
END SUBROUTINE
END
SUBROUTINE TEST
COMMON Y, Z
PRINT *,'X=', X, 'НЕДОСТУПЕН'
&
, '(НЕ ОПРЕДЕЛЕН)'
PRINT *,'Y=', Y, 'ДОСТУПЕН'&
, '(ЧЕРЕЗ COMMON)'
END SUBROUTINE
Внутренняя
процедура
- все переменные
основной прогр.
доступны
Внешняя
процедура
- доступ через
общую область
Результаты работы:
ВНЕШНЯЯ ПРОЦЕДУРА:
X= 3.214007E-39 НЕДОСТУПЕН (НЕ ОПРЕДЕЛЕН)
Y= 2. ДОСТУПЕН (ЧЕРЕЗ COMMON)
ВНУТРЕННЯЯ ПРОЦЕДУРА:
X= 1. ДОСТУПЕН
Z= 3. ДОСТУПЕН
1.7. Подробнее о вызовах
Стек. Вложенные вызовы
Для хранения адреса возврата из подпрограммы применяется
структура, называемая стеком (принцип работы – «первым пришел,
последним ушел»). При вызове подпрограммы адрес возврата по-
мещается на вершину стека, предыдущие адреса остаются «ниже».
В процессе возврата из подпрограммы всегда берется адрес с вер-
шины стека, т.е. последний запомненный. Таким образом, мы все-
гда возвращаемся в правильную точку, даже при выполнении вло-
женных вызовов (вызовов подпрограммы из подпрограммы). Стек
22
PRINT *, 'ВНЕШНЯЯ ПРОЦЕДУРА:'
CALL TEST()
PRINT *, 'ВНУТРЕННЯЯ ПРОЦЕДУРА:'
CALL VNUTR_TEST()
CONTAINS
SUBROUTINE VNUTR_TEST Внутренняя
PRINT *,'X=', X, 'ДОСТУПЕН' процедура
PRINT *,'Z=', Z, 'ДОСТУПЕН' - все переменные
END SUBROUTINE основной прогр.
доступны
END
SUBROUTINE TEST Внешняя
COMMON Y, Z процедура
PRINT *,'X=', X, 'НЕДОСТУПЕН'& - доступ через
, '(НЕ ОПРЕДЕЛЕН)' общую область
PRINT *,'Y=', Y, 'ДОСТУПЕН'&
, '(ЧЕРЕЗ COMMON)'
END SUBROUTINE
Результаты работы:
ВНЕШНЯЯ ПРОЦЕДУРА:
X= 3.214007E-39 НЕДОСТУПЕН (НЕ ОПРЕДЕЛЕН)
Y= 2. ДОСТУПЕН (ЧЕРЕЗ COMMON)
ВНУТРЕННЯЯ ПРОЦЕДУРА:
X= 1. ДОСТУПЕН
Z= 3. ДОСТУПЕН
1.7. Подробнее о вызовах
Стек. Вложенные вызовы
Для хранения адреса возврата из подпрограммы применяется
структура, называемая стеком (принцип работы – «первым пришел,
последним ушел»). При вызове подпрограммы адрес возврата по-
мещается на вершину стека, предыдущие адреса остаются «ниже».
В процессе возврата из подпрограммы всегда берется адрес с вер-
шины стека, т.е. последний запомненный. Таким образом, мы все-
гда возвращаемся в правильную точку, даже при выполнении вло-
женных вызовов (вызовов подпрограммы из подпрограммы). Стек
22
Страницы
- « первая
- ‹ предыдущая
- …
- 20
- 21
- 22
- 23
- 24
- …
- следующая ›
- последняя »
