我正在研究这个F77代码,大量使用COMMON BLOCKS,这些COMMON BLOCKS也用在C程序中(名称修改后)。如果foo(a,b,...)是fortran代码的主程序,那么无论如何都要使COMMON BLOCKS本地化为foo()所以我可以做类似下面的事情吗?
program new_control_routine()
...
call foo(a1,b1,...)
...
call foo(a2,b2,...)
...
end
关键是要多次调用“foo”,每个调用都有独立的 COMMON BLOCKS,即使这些块具有相同的名称。我知道的唯一方法是在第二次调用“foo”时重命名COMMON BLOCKS和相关的子程序,因此它成为另一个例程“foo1”,所以我可以这样做:
programe new_control_routine()
...
call foo(a1,b1,...)
...
call foo1(a2,b2,...)
但这肯定是平凡的,容易出错。
答案 0 :(得分:1)
常见块的要点是它们是全局的,可以使用任何使用其名称的例程。你能在公共块数组中创建变量,并传递索引,以便不同的调用访问不同的元素吗?
为什么要限制自己使用FORTRAN 77?使用Fortran 95/2003,您可以创建用户定义的类型并创建该类型的数组变量。然后传递要处理的元素的索引。用户定义的类型可以是一组复杂的变量。变量可以是子例程的参数,也可以是模块变量。