このF77コードでは、COMMON BLOCKSを幅広く使用しています。これらのCOMMON BLOCKSは、Cプログラム(ネームマングリング後)でも使用されています。 foo(a、b、...)がFortranコードのメインルーチンである場合は、共通ブロックをfoo()にローカルにするために、次のようなことができますか?Fortran 77で共通ブロック変数の範囲をローカライズ
program new_control_routine()
...
call foo(a1,b1,...)
...
call foo(a2,b2,...)
...
end
ポイントは、彼らそれらのブロックが同じ名前を持っているにもかかわらず、それらのそれぞれが独立した共通ブロックを持つ「foo」というの複数の呼び出しを持つことです。私が知っている唯一の方法は、それが別のルーチン「foo1の」になるように、「foo」というの2回目の呼び出しで共通ブロックおよび関連のサブルーチンの名前を変更することですので、私は行うことができます。
programe new_control_routine()
...
call foo(a1,b1,...)
...
call foo1(a2,b2,...)
しかし、これは確かに平凡で、エラーを起こしやすい。
残念ながら、これは従来のコードであり、私は過去20年間に行われたことに従うこと以外に多くの選択肢がありません。そこには何百もの共通ブロックがあります。そして、インデックスのアイデアに感謝します。 – taki
@taki - 理由がわからないためにコードを変更したくない他のユーザーがいない限り、最新のリビジョン(少なくともF90)にアップグレードすることはできません。今日、F77を擁護しているのは、控えめな見方であっても、不合理です。ライブラリが新しいリビジョンにアップグレードされると、多くのユーザーが歓迎されます。私は書き直しを考えていませんが、言語の新しい機能の遅い導入... – Rook
@ldigas - ありがとう。それは最終的にここで人々がすることかもしれません。 – taki