Информатика: Сегментация программ. Гурьяшова Р.Н - 22 стр.

UptoLike

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