HP aC++/HP C A.06.20 Programmer's Guide

ALIGN
#pragma align N
N is a number raised to the power of 2.
HP aC++ supports user-specified alignment for global data. The pragma takes effect
on next declaration. If the align pragma declaration is not in the global scope or if it is
not a data declaration, the compiler displays a warning message. If the specified
alignment is less than the original alignment of data, a warning message is displayed,
and the pragma is ignored. Note that for C code you must initialize the variables,
otherwise the compiler will generate a warning.
#pragma align 2
char c; // "c" is at least aligned on 2 byte boundary.
#pragma align 64
int i, a[10]; // "i" and array "a" are at least aligned 64 byte boundary.
// the size of "a" is still 10*sizeof(int)
PACK
#pragma PACK [n]|[push|pop]|[,<name>][,n]|show]
n can be 1, 2, 4, 8, or 16 bytes. If n is not specified, maximum alignment is set to the
default value.
This file-scoped pragma allows you to specify the maximum alignment of class fields
having non-class types. The alignment of the whole class is then computed as usual,
to the alignment of the most aligned field in the class.
NOTE: The result of applying #pragma pack n to constructs other than class
definitions (including struct definitions) is undefined and not supported. For example:
#pragma pack 1
int global_var; // Undefined behavior: not a class definition
void foo() { // Also undefined
}
Example:
struct S1 {
char c1; // Offset 0, 3 bytes padding
int i; // Offset 4, no padding
char c2; // Offset 8, 3 bytes padding
}; // sizeof(S1)==12, alignment 4
#pragma pack 1
struct S2 {
char c1; // Offset 0, no padding
int i; // Offset 1, no padding
char c2; // Offset 5, no padding
128 Pragma Directives and Attributes