2012-05-09 37 views
2

我有一箇舊的Fortran代碼,我正在清理。在這一點上,我想爲每個過程得到一個不是本地變量的列表:代碼使用(濫用)全局變量,並且我想擺脫對全局變量的如此多的引用。手工操作是一種痛苦,所以我一直在尋找一個編譯器選項來做到這一點,但我還找不到任何東西。任何指針?有關過程中使用的全局變量/模塊變量的警告?

感謝, 安赫爾德維森特

回答

2

我覺得你的痛苦。不幸的是,我幾乎可以提供同情,但我還沒有找到任何我最近使用的Fortran編譯器(幾乎所有這些編譯器在過去6年左右)都可以識別它們的選項。

工具如Understand for FortranFortran Lint可以幫助,但他們會花錢;您可能無需付費即可下載評估版本。

在沒有這樣的工具,我一般:

  1. 註釋掉我希望是全球性的,這通常意味着那些在計劃範圍內聲明的或處於通用塊左右傳遞的變量
  2. IMPLICIT NONE無論如何,你可能正在做這些事情。
  3. 讓編譯器在本地作用域中找到未聲明的變量。
+0

嗨,謝謝。最後,我想我沒有太多的選擇,然後......現在我使用Emacs來編譯文件的一個區域(在我的情況下是一個過程),這樣我就會得到所有主機的錯誤或者使用相關的變量,但我希望有一個更直接的方法來做到這一點。謝謝 –

2

首先使用「隱式無」或等效的編譯器選項。希望你沒有太多未申報的變量。大多數編譯器都有一個選項,可以避免在每個過程中添加「隱式無」。如果沒有未聲明的變量,請轉到下一步,否則請聲明它們。如果有太多未申報的變量,那麼你運氣不好。然後在特定的過程中註釋掉公共塊,包括拉入公共塊和模塊使用語句的行。查看哪些變量未聲明並通過「隱含無」生成警告 - 這將揭示公用塊和模塊中的哪些變量實際在該過程中使用。

如果你有一個包含類型聲明和變量聲明的模塊,這可能不起作用。您可能需要將類型和聲明放在單獨的模塊中,以便您可以僅使用變量聲明註釋模塊。但這對於濫用全局變量的舊代碼來說不太可能。