Это совместное использование действительно является точкой общих блоков. В частности, оператор common
допускает так называемую ассоциацию хранения между различными объектами в программе.
Таким образом, объекты X
и Y
в подпрограмме S2909
являются хранилищем, связанным с объектами X
и Y
в подпрограмме S2900
. Изменения значения в одном объекте X
отражаются в другом объекте X
.
Однако есть несколько вещей, которые стоит отметить по этому поводу.
В common
утверждениях вопроса это зависит от так называемого пустого общего. Вот что происходит, когда для общего блока не указано имя, например, в операторе
common /named/ x, y
Это примечательно, потому что попытка обобщить поведение в этом вопросе на именованные общие блоки может вызвать проблемы.
Объекты в различных местах, где упоминаются общие блоки, связаны не по имени, а по порядку в последовательности хранения. Это означает, что необходимо соблюдать осторожность, скажем,
SUBROUTINE S2909
COMMON X,Y
END
SUBROUTINE S2900
COMMON Y,X
END
Но мой ответ действительно состоит из двух моментов, и вышеизложенное было просто преамбулой, чтобы сделать его более похожим на ответ.
Во-первых, я упомяну патологический случай, который я не ожидал увидеть в дикой природе.
Вопрос опирается на неявную типизацию. Рассмотрим следующее
subroutine S2909
common x, y
x = 2.
y = 3.
end subroutine S2909
implicit integer (a-z)
call S2909
call S2900
contains
subroutine S2900
common x, y
print*, x, y
end subroutine
end
Это пример нецивилизованного написания кода, но он иллюстрирует важную вещь. Поскольку объекты x
в S2909
и x
в подпрограмме S2900
относятся к разным типам, определение одного из них приводит к тому, что другой становится неопределенным. То есть: обновление значения одного не обновляет значение другого. То же самое можно было увидеть и при явной типизации, или при неявной типизации с правилами по умолчанию и сущностями i
и j
, скажем, в одной подпрограмме.
И последнее, что я хочу сказать: есть намного лучшие способы обмена данными "глобально" без общих блоков.
person
francescalus
schedule
12.04.2016