私はこの 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,...)
しかし、これは確かにありふれたものであり、エラーが発生しやすいものです。