Как отмечено в комментариях, правильный ответ на этот вопрос при обучении состоит в том, чтобы избегать использования общих блоков для доступа к переменным из других областей.При написании кода в современную эпоху есть гораздо лучшие способы (более поздние).
К счастью, мы можем взглянуть на этот вопрос с точки зрения «как я понимаю, что происходит с этим общим блоком?»,Такой вопрос полезен тем неудачливым программистам, которые пытаются понять старый (или плохо написанный новый) код.
При рассмотрении программы вопроса следует учитывать, что для получения скомпилируемого кода требуется несколько исправлений (с различными возможнымиподходы).Ошибки там не имеют прямого отношения к обсуждению.
В подпрограмме
subroutine hit
common/part/nzcur
write(*,*)"nzcur in hit",nzcur; pause
end
у нас есть именованный общий блок с именем part
, с одним числовым блоком хранения, который содержит целочисленную переменнуюnzcur
(благодаря неявной типизации).
В этом вопросе очевидно, что переменная nzcur
в этом общем блоке обращается к некоторой другой переменной, называемой nzcur
, и что эта другая переменнаяв основной программе под названием nzcur
.Это неверно.
nzcur
в подпрограмме связан только с первым числовым блоком хранения любого другого общего блока с именем part
.Ассоциация не основана на названии или местоположении в определении общего блока.
В программе вопроса нет другого общего блока с именем part
;nzcur
подпрограммы не связано ни с чем другим.Конечно, она не связана с переменной, не входящей в общий блок.
Из-за этого отсутствия связи переменная не определяется к тому времени, когда оператор записи ссылается на нее.Опять же, определение переменной в основной программе не влияет на определение локальной переменной в подпрограмме.
Чтобы «исправить» связь, необходимо будет поместить переменную nzcur
Основная программа находится в правильном месте в общем блоке с именем part
(в основной программе).
Чтобы ответить на вопрос «как мне установить значение nzcur
в подпрограмме безиспользуя общие блоки? ", обратитесь к другим вопросам, таким как this .