文:プログラムの実行中に,1 つまたは複数の欄,または欄のグループで共有できるデータ領域を定義します。共用体宣言は,構造体宣言内になければなりません。
個々の一意の欄または欄のグループは,別々のマップ宣言によって定義されます。
形式
UNION
map-declaration
次の形式を取ります。
MAP
field-declaration
共用体宣言に含まれている構造体宣言あるいは RECORD 文,共用体宣言に含まれている共用体宣言,または共用体中の (データ型を持つ) データ欄の宣言。これには,どの組込み型または構造型も指定することができます。
規則と振る舞い
通常の Fortran の型宣言と同様に,データは共用体宣言中の欄宣言文で初期化することができます。ただし,1 つの共用体中の複数マップ宣言の欄が初期化されると,データ宣言は,文が現れる順序で初期化されます。その結果,最後の初期化だけが有効になり,それ以前のすべての初期化は上書きされます。
共用体宣言のために確立される共有領域の大きさは,その共用体に対して定義されている最も大きいマップの大きさです。マップの大きさは,その中に宣言されている欄の大きさの和です。
共用体宣言を使って行うデータの操作は,EQUIVALENCE 文を使って行う操作に似ています。違いは,EQUIVALENCE 文の中で宣言されたデータ言語要素は,共通の記憶位置と,そこに存在するデータに同時に結合されるという点にあります。共用体宣言では,1 つの独立した記憶位置を使って,さまざまな種類の欄 (配列または変数) を交互に格納することができます。
共用体宣言では,共有される記憶位置には,共用体宣言内のマップ宣言を一度に 1 つしか結合できません。プログラム中で,同じ共用体宣言内の別のマップ宣言中の欄が引用されると,それ以前のマップ宣言中の欄は不定の状態となり,新しく引用された欄を含んでいるマップ宣言の欄が有効となります。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
STRUCTURE...END STRUCTURE,記録構造体
例
次の例では,構造体 WORDS_LONG が定義されています。この構造体は,2 つのマップ欄を定義する共用体宣言を含んでいます。第 1 のマップ欄は 3 つの INTEGER*2 変数 (WORD_0,WORD_1,および WORD_2) から構成されており,第 2 のマップ欄は INTEGER*4 変数の LONG です。
STRUCTURE /WORDS_LONG/ UNION MAP INTEGER*2 WORD_0, WORD_1, WORD_2 END MAP MAP INTEGER*4 LONG END MAP END UNION END STRUCTURE
構造体 WORDS_LONG の記録の長さは 6 バイトです。次図に,構造体 WORDS_LONG の記録のメモリー・マッピングを示します。
構造体 WORDS_LONG のメモリー・マップ
以下の例では,string2 配列の最初の 40 文字が 4 バイト整数に上書きされ,一方,残りの 20 文字は 2 バイト整数に上書きされることに注意してください。
UNION MAP CHARACTER*20 string1, CHARACTER*10 string2(6) END MAP MAP INTEGER*2 number(10), INTEGER*4 var(10), INTEGER*2 atum(10) END MAP END UNION