www.digitalmars.com
Last update Tue Jun 6 16:38:19 2006

Structs & Unions

AggregateDeclaration:
	Tag { DeclDefs }
	Tag Identifier StructBody
	Tag Identifier ;

Tag:
	struct
	union

StructBody:
	{ }
	{ StructBodyDeclarations }

StructBodyDeclarations:
	StructBodyDeclaration
	StructBodyDeclaration StructBodyDeclarations

StructBodyDeclaration:
	Declaration
	Invariant
	UnitTest
	StructAllocator
	StructDeallocator

StructAllocator:
	ClassAllocator

StructDeallocator:
	ClassDeallocator
They work like they do in C, with the following exceptions: Structs and unions are meant as simple aggregations of data, or as a way to paint a data structure over hardware or an external type. External types can be defined by the operating system API, or by a file format. Object oriented features are provided with the class data type.

Static Initialization of Structs

Static struct members are by default initialized to whatever the default initializer for the member is, and if none supplied, to the default initializer for the member's type. If a static initializer is supplied, the members are initialized by the member name, colon, expression syntax. The members may be initialized in any order. Members not specified in the initializer list are default initialized.
struct X { int a; int b; int c; int d = 7;}
static X x = { a:1, b:2};	      // c is set to 0, d to 7
static X z = { c:4, b:5, a:2 , d:5};  // z.a = 2, z.b = 5, z.c = 4, z.d = 5
C-style initialization, based on the order of the members in the struct declaration, is also supported:
static X q = { 1, 2 };	  // q.a = 1, q.b = 2, q.c = 0, q.d = 7

Static Initialization of Unions

Unions are initialized explicitly.
union U { int a; double b; }
static U u = { b : 5.0 };		// u.b = 5.0
Other members of the union that overlay the initializer, but occupy more storage, have the extra storage initialized to zero.

Struct Properties

.sizeof			Size in bytes of struct
.alignof		Size boundary struct needs to be aligned on

Struct Field Properties

.offsetof		Offset in bytes of field from beginning
			of struct