[Home]
[Search]
[D]
Last update Nov 23, 2004
Structs & Unions
AggregateDeclaration:
Tag { DeclDefs }
Tag Identifier { DeclDefs }
Tag Identifier ;
Tag:
struct
union
They work like they do in C, with the following exceptions:
- no bit fields
- alignment can be explicitly specified
- no separate tag name space - tag names go into the current scope
- declarations like:
struct ABC x;
are not allowed, replace with:
ABC x;
- anonymous structs/unions are allowed as members of other structs/unions
- Default initializers for members can be supplied.
- Member functions and static members are allowed.
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
Feedback and Comments
Add feedback and comments regarding this
page.
Copyright (c) 1999-2004 by Digital Mars, All Rights Reserved