Fortran 关于过程中使用的全局变量/模块变量的警告?

Fortran 关于过程中使用的全局变量/模块变量的警告?,fortran,Fortran,我有一个旧的Fortran代码,我正在清理。在这一点上,我希望为每个过程获得一个非局部变量的列表:代码使用(滥用)全局变量,我希望尽可能避免对全局变量的引用。手工操作是一件痛苦的事情,所以我正在寻找一个编译器选项来完成这项工作,但是我还没有找到任何东西。有什么建议吗 谢谢, 我感觉到了你的痛苦。遗憾的是,同情几乎是我所能提供的一切,我还没有找到一个选项来识别我最近使用过的任何Fortran编译器(几乎都是在过去6年左右使用的) 诸如或之类的工具可能会有所帮助,但需要花钱;您可以免费下载评估副本

我有一个旧的Fortran代码,我正在清理。在这一点上,我希望为每个过程获得一个非局部变量的列表:代码使用(滥用)全局变量,我希望尽可能避免对全局变量的引用。手工操作是一件痛苦的事情,所以我正在寻找一个编译器选项来完成这项工作,但是我还没有找到任何东西。有什么建议吗

谢谢,
我感觉到了你的痛苦。遗憾的是,同情几乎是我所能提供的一切,我还没有找到一个选项来识别我最近使用过的任何Fortran编译器(几乎都是在过去6年左右使用的)

诸如或之类的工具可能会有所帮助,但需要花钱;您可以免费下载评估副本

在缺乏此类工具的情况下,我通常:

  • 注释掉我希望是全局的变量,这通常意味着那些在程序范围内声明或在公共块中传递的变量
  • 随意地拍打
    IMPLICIT NONE
    ,不管怎样,你可能正在这样做
  • 让编译器在局部作用域中发现未声明的变量

  • 我感觉到你的痛苦。遗憾的是,同情几乎是我所能提供的一切,我还没有找到一个选项来识别我最近使用过的任何Fortran编译器(几乎都是在过去6年左右使用的)

    诸如或之类的工具可能会有所帮助,但需要花钱;您可以免费下载评估副本

    在缺乏此类工具的情况下,我通常:

  • 注释掉我希望是全局的变量,这通常意味着那些在程序范围内声明或在公共块中传递的变量
  • 随意地拍打
    IMPLICIT NONE
    ,不管怎样,你可能正在这样做
  • 让编译器在局部作用域中发现未声明的变量
  • 首先使用“隐式无”或等效的编译器选项。希望您没有太多未声明的变量。大多数编译器都有一个选项,可以省去在每个过程中添加“隐式无”的麻烦。如果没有未声明的变量,请转至下一步,否则请声明它们。如果有太多未声明的变量,你就不走运了。然后在特定的过程中注释掉公共块,包括拉入公共块的行和模块使用语句。查看哪些变量未声明,并通过“隐式无”生成警告——这将揭示公共块和模块中的哪些变量在该过程中实际使用

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

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


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

    您好,谢谢。最后我想我没有太多的选择。。。现在,我使用Emacs只编译文件的一个区域(在我的例子中是一个过程),这样我就可以得到所有主机的错误或使用相关变量,但我希望有一种更直接的方法来完成。谢谢,谢谢。最后我想我没有太多的选择。。。现在,我使用Emacs只编译文件的一个区域(在我的例子中是一个过程),这样我就可以得到所有主机的错误或使用相关变量,但我希望有一种更直接的方法来完成。谢谢