Forth 2012 標準では、 やや不便な形式の構造体が定義されています。 一般に field+
を使用する場合は、
自分でアライメントを行う必要がありますが、 アライメント機能を含む便利なワード(例: field:
)が多数あります。
典型的な使用例は以下のとおりです:
0 field: s-a faligned 2 floats +field s-b constant s-struct
この構造体を記述する別の方法は以下のとおりです:
begin-structure s-struct field: s-a faligned 2 floats +field s-b end-structure
以下のように、 同一のフィールドと追加のフィールドを持つ構造体を定義できます:
s-struct cfield: t-c cfield: t-d constant t-struct
あるいは、
s-struct extend-structure t-struct cfield: t-c cfield: t-d end-structure
begin-structure
( "name" – struct-sys 0 ) facility-ext “begin-structure”
extend-structure
( n "name" – struct-sys n ) gforth-1.0 “extend-structure”
サイズ n の既存の構造体の拡張として、 新しい構造体 name を開始します。
end-structure
( struct-sys +n – ) facility-ext “end-structure”
begin-struction
で開始された構造体を終了します
+field
( noffset1 nsize "name" – noffset2 ) facility-ext “plus-field”
定義ワード。 name ( addr1 -- addr2 )
を定義します。 ここで、 addr2 は
addr1+noffset1 です。 noffset2 は noffset1+nsize です。
cfield:
( u1 "name" – u2 ) facility-ext “c-field-colon”
文字サイズのフィールドを定義します
field:
( u1 "name" – u2 ) facility-ext “field-colon”
アライメントされたセル・サイズのフィールドを定義します
2field:
( u1 "name" – u2 ) gforth-0.7 “two-field-colon”
アライメントされた2倍長セル・サイズのフィールドを定義します
ffield:
( u1 "name" – u2 ) floating-ext “f-field-colon”
アライメントされた浮動小数点サイズのフィールドを定義します
sffield:
( u1 "name" – u2 ) floating-ext “s-f-field-colon”
sfaligned された sfloat サイズのフィールドを定義します
dffield:
( u1 "name" – u2 ) floating-ext “d-f-field-colon”
dfaligned された dfloat サイズのフィールドを定義します
wfield:
( u1 "name" – u2 ) gforth-1.0 “w-field-colon”
16 ビット値のアライメントされたフィールドを定義します。
lfield:
( u1 "name" – u2 ) gforth-1.0 “l-field-colon”
32ビット値にアライメントされたフィールドを定義します。
xfield:
( u1 "name" – u2 ) gforth-1.0 “x-field-colon”
64ビット値にアライメントされたフィールドを定義します。