mgi*_*son 6 fortran fortran-common-block
我正在处理一些COMMON广泛使用块的遗留代码,有时使用该SAVE语句.在查阅Fortran标准后,它说:
在
SAVE语句中以斜杠开头和后跟的公共块名称的出现具有指定该公共块中的所有实体的效果.
在什么情况下将变量放在公共块中并不意味着SAVE什么?由于变量必须可以在包含该公共块的任何其他程序单元中访问,因此它怎么可能不被SAVE编辑?
我不得不查一查,因为我的印象和你一样.
似乎只有未命名的,所谓的空白公共块中的变量才能在整个程序中保留其定义状态.从子程序返回时,命名公共块中未保存的变量将变为未定义,除非另一个当前活动的程序单元包含同一公共块的公共语句.
从标准(Fortran 77,但最新的包含类似的措辞):
17.3导致实体未定义的事件
[...]
6.在子程序中执行RETURN语句或END语句会导致子程序中的所有实体变为未定义,但以下情况除外:
[...]
d.命名公共块中的实体,出现在子程序中,并出现在至少一个直接或间接引用子程序的其他程序单元中