#### 6.23.6 Forth200x Structures ¶

The Forth 2012 standard defines a slightly less convenient form of structures. In general (when using `field+`, you have to perform the alignment yourself, but there are a number of convenience words (e.g., `field:`) that include alignment.

A typical usage example is:

```0
field:                   s-a
faligned 2 floats +field s-b
constant s-struct
```

An alternative way of writing this structure is:

```begin-structure s-struct
field:                   s-a
faligned 2 floats +field s-b
end-structure
```

You can define a structure that has the same fields and additional fields as follows:

```s-struct
cfield: t-c
cfield: t-d
constant t-struct
```

or alternatively

```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”
```

Start a new structure name as extension of an existing structure with size n.

````end-structure` ( struct-sys +n –  ) facility-ext “end-structure”
```

end a structure started wioth `begin-structure`

````+field` ( noffset1 nsize "name" – noffset2  ) facility-ext “plus-field”
```

Defining word; defines name `( addr1 -- addr2 )`, where addr2 is addr1+noffset1. noffset2 is noffset1+nsize.

````cfield:` ( u1 "name" – u2  ) facility-ext “c-field-colon”
```

Define a char-sized field

````field:` ( u1 "name" – u2  ) facility-ext “field-colon”
```

Define an aligned cell-sized field

````2field:` ( u1 "name" – u2  ) gforth-0.7 “two-field-colon”
```

Define an aligned double-cell-sized field

````ffield:` ( u1 "name" – u2  ) floating-ext “f-field-colon”
```

Define a faligned float-sized field

````sffield:` ( u1 "name" – u2  ) floating-ext “s-f-field-colon”
```

Define a sfaligned sfloat-sized field

````dffield:` ( u1 "name" – u2  ) floating-ext “d-f-field-colon”
```

Define a dfaligned dfloat-sized field

````wfield:` ( u1 "name" – u2  ) gforth-1.0 “w-field-colon”
```

Define a naturally aligned field for a 16-bit value.

````lfield:` ( u1 "name" – u2  ) gforth-1.0 “l-field-colon”
```

Define a naturally aligned field for a 32-bit value.

````xfield:` ( u1 "name" – u2  ) gforth-1.0 “x-field-colon”
```

Define a naturally aligned field for a 64-bit-value.