For compatibility with Microsoft Windows compilers, GCC supports a set
of #pragma pack directives that change the maximum alignment of
members of structures (other than zero-width bit-fields), unions, and
classes subsequently defined. The n value below specifies the
new alignment in bytes and may have the value 1, 2, 4, 8, and 16. A
value of 0 is also permitted and indicates the default alignment (as if
no #pragma pack were in effect) should be used.
#pragma pack(n)Sets the new alignment according to n.
#pragma pack()Sets the alignment to the one that was in effect when compilation started (see also command-line option -fpack-struct[=n]. See Options for Code Generation Conventions).
#pragma pack(push[,n])Pushes the current alignment setting on an internal stack and then optionally sets the new alignment.
#pragma pack(pop)Restores the alignment setting to the one
saved at the top of the internal stack (and removes that stack entry).
Note that #pragma pack([n]) does not influence this internal
stack; thus it is possible to have #pragma pack(push) followed by
multiple #pragma pack(n) instances, with the original state
restored by a single #pragma pack(pop).
You can also use the packed type attribute (see Common Type Attributes) to pack a structure. However, the packed
attribute interferes with #pragma pack, and attempting to use
them together may cause spurious warnings or unexpected behavior.
Some targets, e.g. x86 and PowerPC, support the #pragma ms_struct
directive, which causes subsequent structure and union declarations to
be laid out in the same way as
__attribute__ ((ms_struct)); see x86 Variable Attributes.
#pragma ms_struct onTurns on the Microsoft layout.
#pragma ms_struct offTurns off the Microsoft layout.
#pragma ms_struct resetGoes back to the default layout.
Most targets also support the #pragma scalar_storage_order directive
which lays out subsequent structure and union declarations in
in the same way as the documented
__attribute__ ((scalar_storage_order)); see Common Type Attributes.
#pragma scalar_storage_order big-endian#pragma scalar_storage_order little-endianSet the storage order of scalar fields to big- or little-endian, respectively.
#pragma scalar_storage_order defaultGoes back to the endianness that was in effect when compilation started (see also command-line option -fsso-struct=endianness see Options Controlling C Dialect).