2

我有一个正在清理的旧 Fortran 代码。在这一点上,我想为每个过程获取一个非本地变量的列表:代码使用(滥用)全局变量,我想尽可能多地摆脱对全局变量的引用。手工操作很痛苦,所以我一直在寻找一个编译器选项来执行此操作,但我还没有找到任何东西。任何指针?

谢谢, Ángel de Vicente

4

2 回答 2

2

首先使用“implicit none”或等效的编译器选项。希望您没有太多未声明的变量。大多数编译器都有一个选项,可以节省您在每个过程中添加“隐式无”。如果没有未声明的变量,则进行下一步,否则声明它们。如果有太多未声明的变量,那么你就不走运了。然后在特定的过程中注释掉公共块,包括拉入公共块的行和模块使用语句。查看哪些变量未声明并通过“隐式无”生成警告——这将揭示公共块和模块中的哪些变量在该过程中实际使用。

如果您有一个包含类型声明和变量声明的模块,这可能不起作用。您可能需要将类型和声明放在单独的模块中,以便您可以只注释掉带有变量声明的模块。但这对于滥用全局变量的旧代码来说不太可能。

于 2012-05-09T19:25:13.507 回答
2

我感觉到你的痛苦。可悲的是,同情几乎是我所能提供的,我还没有找到我最近使用的任何 Fortran 编译器(在过去 6 年左右的时间里几乎所有)都可以识别它们的选项。

了解 FortranFortran Lint等工具可以提供帮助,但它们需要花钱;您可能无需付费即可下载评估副本。

在没有此类工具的情况下,我通常:

  1. 注释掉我希望是全局的变量,这通常意味着那些在程序范围内声明或在公共块中传递的变量
  2. 随意IMPLICIT NONE拍打,你可能正在这样做。
  3. 让编译器在本地范围内发现未声明的变量。
于 2012-05-09T15:29:23.583 回答