Я вхожу в Фортран с тяжелым C фоном. Это все довольно просто, за исключением фактических механизмов того, как COMMON
блоки работают, сбивает меня с толку, и я не могу найти место, которое описывает их подробно.
Допустим, у меня есть следующий блок COMMON
в FORTRAN .
COMMON/MYBLOCK/ A,B,C
Насколько я понимаю, это отведет часть памяти, которая содержит три ... вещи, которые на самом деле не связаны с именами в блоке, и фактически если If имеют этот следующий код позже в моем источнике:
SUBROUTINE MYSUB(...)
...
COMMON/MYBLOCK/ X,Y,Z
...
END
Тогда теперь X связан с тем, что раньше было в A, и теми же Y с B и Z с C.
Так это значит COMMON/MYBLOCK/
это ... массив пустых указателей, когда он объявлен? Нет никакого типа, связанного с каким-либо из этих указателей, так что ... память выделяется при назначении значения? Что произойдет, если я скажу A='A'
в моей основной теме, но затем в MYSUB
я скажу A=3.141592
? Если у меня есть подпрограмма, по которой я хочу вернуть значение в A
по ссылке (потому что это часть внешней библиотеки), могу ли я просто сказать CALL MYSUB2(A)
и рассчитывать на компилятор, чтобы разобраться с этим? Или мне нужно сначала вызвать MYSUB2
для локальной переменной, а затем присвоить ее A
?
Это странно, FORTRAN такой строгий типизированный язык везде, но блоки COMMON
такие же, как "делай, что хочешь, чувак, мы здесь не пишем" ...