我正在將F77中編寫的舊源代碼修改爲F90。我忍受痛苦,想要弄清楚哪個變量是有意的,有意的(out)和意圖(inout)。如何整理FORTRAN中的intent(in),intent(out)和intent(inout)
您有任何指導或建議嗎?
任何想法和建議表示讚賞。
邁克爾
我正在將F77中編寫的舊源代碼修改爲F90。我忍受痛苦,想要弄清楚哪個變量是有意的,有意的(out)和意圖(inout)。如何整理FORTRAN中的intent(in),intent(out)和intent(inout)
您有任何指導或建議嗎?
任何想法和建議表示讚賞。
邁克爾
意圖(INOUT)如果實際參數是一個變量永遠是可行的(見Fortran intent(inout) versus omitting intent),但是給程序員和編譯器提供了沒有信息。也不需要一個意圖屬性,因此您可以逐步改進代碼。如果變量只出現在賦值語句的RHS中,那麼intent(in)是最好的。如果僅僅在LHS上,那麼意圖(out)。如果將變量用作一個或多個過程調用的參數,則會變得更加複雜,因爲那樣您必須跟蹤該過程中的用法。因此,如果您從最低級別的程序開始並按照您的方式工作,那麼最簡單。大多數編譯器會警告錯誤,例如分配給一個intent(in)參數。爲了讓編譯器檢查各個過程的一致性,每個被調用過程的接口都必須對調用者是顯式的。知道接口的最簡單方法是將程序放入一個或多個模塊中並「使用」該模塊。接口在同一模塊中的過程之間是顯式的。
艾倫·米勒寫了一個程序叫to_f90.f90,對於形成良好F77代碼會自動處理這一點。有一個在他的網站的鏡像:
http://jblevins.org/mirror/amiller/
具體的例行位於:
如前所述,intent(inout)應該始終有效。
對於變量X的意圖(in)和意圖(out),我們建議在子例程中爲「X =」和「X =」進行搜索(CTRL + F或其他)。通過這種方式,您可以在執行此子程序期間檢查變量是否被修改。如果不是:intent(in)。這將永遠是真實的,但如果變量在子函數中被修改或者調用另一個例程。因此,首先要檢查您正在翻譯的子例程中是否調用了函數或例程。
+1;不知道這個工具存在。這激勵我尋找其他人:還有Polyhedron Software的在線工具http://www.polyhedron.com/plusfortonline.php。 – 2012-02-15 16:39:36