2

クリーンアップしている古いFortranコードがあります。この時点で、各プロシージャについて、ローカルではない変数のリストを取得したいと思います。コードはグローバル変数を使用(悪用)し、グローバル変数への参照をできるだけ多く削除したいと思います。手作業で行うのは面倒なので、これを行うためのコンパイラオプションを探していましたが、まだ何も見つかりませんでした。ポインタはありますか?

ありがとう、アンヘル・デ・ビセンテ

4

2 に答える 2

2

最初に「implicit none」または同等のコンパイラ オプションを使用します。宣言されていない変数が多すぎないことを願っています。ほとんどのコンパイラには、すべてのプロシージャに「implicit none」を追加する手間を省くオプションがあります。未宣言の変数がない場合は次の手順に進み、そうでない場合は宣言します。宣言されていない変数が多すぎると、うまくいきません。次に、特定の手順で共通ブロックをコメントアウトし、共通ブロックとモジュール使用ステートメントをプルする行を含めます。どの変数が宣言されていないかを確認し、「implicit none」を介して警告を生成します。これにより、共通ブロックとモジュールのどの変数がその手順で実際に使用されているかが明らかになります。

型宣言と変数宣言の両方を含むモジュールがある場合、これは機能しない可能性があります。型と宣言を別々のモジュールに配置して、変数宣言を含むモジュールだけをコメントアウトできるようにする必要がある場合があります。しかし、グローバル変数を悪用する古いコードではそうはいきません。

于 2012-05-09T19:25:13.507 に答える
2

あなたの痛みが分かります。悲しいことに、私が提供しなければならないのはほぼ同情だけです。最近使用した Fortran コンパイラ (ほとんどすべて、過去 6 年間かそこらで使用したもの) を特定するオプションは見つかりませんでした。

Understanding for FortranFortran Lintなどのツールは役に立ちますが、費用がかかります。無償で評価版をダウンロードできる場合もあります。

そのようなツールがない場合、私は一般的に次のことを行います。

  1. グローバルであると予想される変数をコメントアウトします。これは通常、プログラムスコープで宣言されているか、共通ブロックで渡されている変数を意味します
  2. あなたはおそらくとにかくIMPLICIT NONEやっているでしょう。
  3. ローカル スコープで宣言されていない変数を見つけるようにコンパイラを取得します。
于 2012-05-09T15:29:23.583 に答える