我带着沉重的 C 背景进入 FORTRAN。这一切都非常简单,除了COMMON
块如何工作的实际机制让我感到困惑,而且我找不到任何详细描述它们的地方。
假设我COMMON
在 FORTRAN 中有以下块。
COMMON/MYBLOCK/ A,B,C
据我了解,这将留出一块内存,其中包含三个...事物,这些事物与块中的名称并没有真正关联,实际上如果如果稍后在我的源代码中有下一个代码:
SUBROUTINE MYSUB(...)
...
COMMON/MYBLOCK/ X,Y,Z
...
END
那么现在 X 与以前在 A 中的任何东西相关联,同样的 Y 与 B 和 Z 与 C 相关联。
所以这意味着COMMON/MYBLOCK/
...声明时是一个 void 指针数组?没有与这些指针关联的类型,所以......分配值时分配内存?如果我A='A'
在主线程中说,然后在MYSUB
我说,会发生什么A=3.141592
?如果我有一个想要A
通过引用返回值的子例程(因为它是外部库的一部分),我可以说CALL MYSUB2(A)
并指望编译器对其进行排序吗?还是我需要先调用MYSUB2
局部变量,然后将其分配给A
?
很奇怪,FORTRAN 在其他任何地方都是一种强类型语言,但是COMMON
块就像“做任何你想做的事,伙计,我们不在这里做类型”......