"保存"一个共同的块

mgi*_*son 6 fortran fortran-common-block

我正在处理一些COMMON广泛使用块的遗留代码,有时使用该SAVE语句.在查阅Fortran标准后,它说:

SAVE语句中以斜杠开头和后跟的公共块名称的出现具有指定该公共块中的所有实体的效果.

在什么情况下将变量放在公共块中并不意味着SAVE什么?由于变量必须可以在包含该公共块的任何其他程序单元中访问,因此它怎么可能不被SAVE编辑?

eri*_*ous 7

我不得不查一查,因为我的印象和你一样.

似乎只有未命名的,所谓的空白公共块中的变量才能在整个程序中保留其定义状态.从子程序返回时,命名公共块中未保存的变量将变为未定义,除非另一个当前活动的程序单元包含同一公共块的公共语句.

从标准(Fortran 77,但最新的包含类似的措辞):

17.3导致实体未定义的事件
[...]
6.在子程序中执行RETURN语句或END语句会导致子程序中的所有实体变为未定义,但以下情况除外:
[...]
d.命名公共块中的实体,出现在子程序中,并出现在至少一个直接或间接引用子程序的其他程序单元中

  • +1; 哇,这不仅是我不知道的,我"知道"它完全错了.但另一方面,我想在实践中通常情况下,命名公共块被精确地用于在整个调用树中共享数据.只是另一个棘手的理由从来没有使用过的东西. (2认同)