• ベストアンサー

FORTRANのCOMMONについて

 最近、FORTRANについての勉強を始めたものですが いまいち「COMMON」の意味が理解出来ません。 例えば下のようなプログラムで(簡単に書きすぎてすいません)   (Aグループ)       COMMON X         X=10   (Bグループ)       COMMON Y    (UEXTERNAL)       COMMON X. Y。     WRITE X     X=10と出力されるのでしょうか? 分る範囲でいいのでお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

ずいぶん昔(30年ほど前)にやっただけなので浦島太郎ですが。 COMMONは複数のプログラム間でデータを共有する手法ですね。 COMMON宣言は順序だけが意味を持ちます。 Aグループ X Bグループ Y Cグループ X Y と定義したとするとCグループのYは「ままこ」で XaとYbとXcは同じエリアを指します。 ご質問どおり、write Xは X=10ですが、これはXだからではなく、1個目の変数だからと言う事です。 もし、Bグループで、Y=5をやれば、write Xは 5となります。 余談ですが、COMMONエリアはハイ・メモリーから逆順に取られていた記憶があります。今でもそうなんでしょうかね。

その他の回答 (1)

noname#21649
noname#21649
回答No.2

無名共通領域の宣言ですから.多分お話のようになると思いますが. 無名共通領域の取り扱いで.変数名は土のように変えても良いのですが.領域の大きさを同じにする必要があったかと思います(機種依存性かも)。 つまり.暗黙の変数型を使用しているとして.A.B共に4バイト割り当てています。 しかし.最後のCOMMON文では8バイト割り当てています。すると.場合によっては変数の共食い(方言の可能性あり)でYの数値を操作した時にXの値も変化してしまうとかのおかしなことが発生する場合があります。