2012-04-05 60 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