0

私はこの F77 コードに取り組んでおり、COMMON BLOCK を広範囲に使用しています。これらの COMMON BLOCK は C プログラムでも使用されています (名前マングリング後)。foo(a, b, ...) が fortran コードのメイン ルーチンである場合、COMMON BLOCKS を foo() に対してローカルにする方法はありますか?

program new_control_routine()

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

ポイントは、それらのブロックが同じ名前を持っていても、それぞれが独立した共通ブロックを持つ「foo」の複数の呼び出しを持つことです。私が知っている唯一の方法は、「foo」の2番目の呼び出しで共通ブロックと関連するサブルーチンの名前を変更することです。これにより、別のルーチン「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 に答える