共通ブロック中のデータ項目の配置

COMMON 文中のデータ項目の順序は,データ項目が格納される順序を決定します。X という名前の共通ブロックが次のように宣言されているとします。

	LOGICAL(KIND=2)  FLAG
	INTEGER          IARRY_I(3)
	CHARACTER(LEN=5) NAME_CH
	COMMON /X/ FLAG, IARRY_I(3), NAME_CH

次図に示すように,位置合わせコンパイラ・オプションを省略すると,共通ブロックには IARRY_I の第 1 配列要素の先頭から,位置合わせされていないデータ項目が含まれるようになります。

位置合わせされていないデータを含む共通ブロック

次図に示すように,共通ブロックを使用しているプログラム単位を /align:commons オプションを付けてコンパイルすると,データ項目は自然に位置合わせされます。

自然に位置合わせされたデータを含む共通ブロック

共通ブロック X は,大きさが 32 ビット以下のデータ項目を含んでいるので,/align:commons を指定するようにします。共通ブロックが 32 ビットよりも大きくなる可能性のあるデータ項目 (REAL(KIND=8) のデータなど) を含んでいる場合,/align:dcommons を使用します。

共通ブロック・データを使用するソース・ファイルを変更し,COMMON 文中の数値変数を大きさの大きい順に定義して,文字変数を最後に置くことで,可搬性を高め,充填や DF コマンド・オプションの /align:commons/align:dcommons なしに,データ項目を自然に位置合わせすることができます。

	LOGICAL(KIND=2)  FLAG
	INTEGER          IARRY_I(3)
	CHARACTER(LEN=5) NAME_CH
	COMMON /X/ IARRY_I(3), FLAG, NAME_CH

次図に示すように,変数を大きさの大きい順に並べ,文字データを最後に置けば,データ項目は自然に位置合わせされます。

自然に位置合わせされるように並べ替えられたデータを含む共通ブロック

共通ブロック・データを使用するソース・ファイルをすべて変更または作成するときには,宣言に一貫性を持たせるために,共通ブロック・データ宣言を 1 つのモジュールにまとめることを検討してください。互換性の理由から共通ブロックが不要な場合 (ファイルへの格納や,Compaq Fortran 77 に使用する場合) には,共通ブロックを使わずに,データ宣言をモジュールに入れることができます。