2012-04-05 66 views
0

我正在使用這個常用塊的F77代碼,並且這些常用塊也用於C程序(名稱修改後)。如果foo(a,b,...)是Fortran代碼的主要例程,那麼是否有必要將公共塊設置爲foo()的局部變量,以便我可以執行類似下面的操作?在Fortran 77中本地化常見塊變量的範圍

program new_control_routine() 

... 
call foo(a1,b1,...) 
... 
call foo(a2,b2,...) 
... 
end 

的一點是要有「富」與每個人有獨立公共塊的多個調用,即使他們這些塊具有相同的名稱。我所知道的唯一的辦法就是重新命名的「foo」的第二個呼叫公共塊和相關子,所以它成爲另一個例程「foo1」,所以我可以做:

programe new_control_routine() 
... 
call foo(a1,b1,...) 
... 
call foo1(a2,b2,...) 

但這肯定是平凡而容易出錯。

回答

1

公共塊的要點是它們是全局的,可以使用任何使用其名稱的例程訪問。你可以在公共塊數組中創建變量,並傳遞一個索引,以便不同的調用訪問不同的元素?

爲什麼限制自己FORTRAN 77?使用Fortran 95/2003,您可以創建用戶定義類型並創建該類型的數組變量。然後你傳遞你想要處理的元素的索引。用戶定義的類型可能是一組複雜的變量。該變量可以是子例程的參數或模塊變量。

+0

不幸的是,這是一個遺留代碼,我沒有太多的選擇,只能按照過去二十年的工作。那裏有數百個常見的街區。並感謝您的索引想法。 – taki 2012-04-05 18:54:19

+1

@taki - 除非有其他用戶使用您的代碼不願意因未知原因而改變,否則我沒有理由不能將其升級到更新的版本(至少F90)。現在堅持F77,即使是保守的觀點,也是不合理的。許多用戶歡迎圖書館升級到更新的版本。我沒有考慮重寫,但慢慢引入了語言的新功能... – Rook 2012-04-05 21:31:05

+0

@ldigas - 謝謝。這可能是人們最終會做的事情。 – taki 2012-04-05 22:54:44