2012-05-09 38 views
2

我有一个旧的Fortran代码,我正在清理。在这一点上,我想为每个过程得到一个不是本地变量的列表:代码使用(滥用)全局变量,并且我想摆脱对全局变量的如此多的引用。手工操作是一种痛苦,所以我一直在寻找一个编译器选项来做到这一点,但我还找不到任何东西。任何指针?有关过程中使用的全局变量/模块变量的警告?

感谢, 安赫尔德维森特

回答

2

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

工具如Understand for FortranFortran Lint可以帮助,但他们会花钱;您可能无需付费即可下载评估版本。

在没有这样的工具,我一般:

  1. 注释掉我希望是全球性的,这通常意味着那些在计划范围内声明的或处于通用块左右传递的变量
  2. IMPLICIT NONE无论如何,你可能正在做这些事情。
  3. 让编译器在本地作用域中找到未声明的变量。
+0

嗨,谢谢。最后,我想我没有太多的选择,然后......现在我使用Emacs来编译文件的一个区域(在我的情况下是一个过程),这样我就会得到所有主机的错误或者使用相关的变量,但我希望有一个更直接的方法来做到这一点。谢谢 –

2

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

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