Special Fields
There are two types of special fields: unused data and alignments.
Unused Data
The unused keyword may be used in a structure
or a bit structure, and lets you skip data which
is not used or just not important. The declaration syntax is
unused[number];
where number the number of bytes or bits to skip. In the following example
struct DocumentRecord {
byte enum { Complete, NeedsReview, OutOfDate } Status;
unused[3];
FILETIME CreationTime;
char szName[];
};
three bytes at offsets 1 to 3 contain no useful data and should be skipped.
The unused keyword serves the same purpose in bit structures
except it forces skipping bits, not bytes:
byte bitstruct FlagByte {
unused[1];
Valid[1];
Locked[1];
unused[2];
nLocks[3];
};
Alignments
The alignment directive can occur within a structure
definition and has two forms:
align address[number]
align offset[number]
The number in the square brackets specifies alignment of the next field.
The first form aligns the address of the field when the structure is
mapped; the second form aligns the offset from the
start of the structure. The offset alignment does not depend on structure mapping
unless some previous field is of a variable size.
struct DocumentRecord {
byte enum { Complete, NeedsReview, OutOfDate } Status;
align offset [4]; // Align to doubleword boundary
FILETIME CreationTime;
char szName[];
};
The size of the alignment operator varies from 0 to number minus 1.
The alignment value may be any positive value, not necessarily a power of two.
|