0

我正在使用广泛使用 COMMON BLOCKS 来处理这个 F77 代码,并且这些 COMMON BLOCKS 也用于 C 程序(在名称修改之后)。如果 foo(a, b, ...) 是 fortran 代码的主要例程,那么无论如何都要使 COMMON BLOCKS 成为 foo() 的本地程序,以便我可以执行以下操作?

program new_control_routine()

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

关键是要多次调用“foo”,每个调用都有独立的公共块,即使这些块具有相同的名称。我知道的唯一方法是在“foo”的第二次调用中重命名 COMMON BLOCKS 和相关子例程,使其成为另一个例程“foo1”,所以我可以这样做:

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

但这肯定是平凡且容易出错的。

4

1 回答 1

1

公共块的要点是它们是全局的,任何使用它们名称的例程都可以访问它们。您能否在公共块数组中创建变量并传递索引,以便您的不同调用访问不同的元素?

为什么要限制自己使用 FORTRAN 77?使用 Fortran 95/2003,您可以创建用户定义类型并创建该类型的数组变量。然后传递要处理的元素的索引。用户定义类型可以是一组复杂的变量。该变量可以是子例程的参数或模块变量。

于 2012-04-05T18:45:53.870 回答