2

我有大量遗留代码要处理(Fortran F90)。最难处理的事情之一是每个文件都包含少量的海量函数,而每个函数都有一长串

use <module name>

然后代码使用这些模块中定义的变量和数据结构。问题是很难确定这些变量最初定义/初始化的位置,因为它们是在其中一个模块中定义的,use并在代码中的其他地方初始化(大约 100 000 LOC)。

有没有办法在 Fotran 中提供命名空间解析?通过阅读,我猜不是,所以更一般地说,有没有一种好的 Fortran-Y 方法来解决这类问题?

4

2 回答 2

6

您可以选择从use语句中导入的内容,如下所示:

use foo, only : bar, baz

在这种情况下,只会导入barbaz变量。这也提供了一种自我记录您的代码的方法,这看起来就像您正在寻找的那样。

于 2013-11-11T16:26:46.203 回答
5

稍微扩展一下@SethMMorton 已经告诉您的内容,您还可以重命名导入的项目

use foo, only : local_name=>bar, baz=>foo_baz

不幸的是,Fortran 没有提供很多语言指导的规则来做其他语言对命名空间所做的事情。通过在声明它们的模块名称前加上前缀来重命名变量将完全是程序员的决定和责任。

当然,可以使用标准或管理强制的纪律,但编译器很少能在其中任何一个方面提供太多帮助。

或者人们可以这样安慰自己,从模块中导出许多名称可能违反了良好的软件工程实践(封装、信息隐藏、你有什么),并且你正在处理的问题是由早期的,缺乏纪律的一代开发人员。

于 2013-11-11T17:08:54.637 回答