C ユーザーズガイド

#pragma pack(n)

構造体のメンバーの境界整列を制御します。デフォルトでは、構造体のメンバーは、char 型なら 1 バイト、short 型なら 2 バイト、整数なら 4 バイトというように、その自然境界で整列させられます。n を指定する場合には、ゼロもしくはすべての構造体メンバーに対して最も厳密な自然境界整列となる 2 の乗数にします。

このプラグマを使用すると、構造体メンバーの境界整列をデフォルトとは異なるものにすることができます。たとえば、#pragma pack(2) を指定すると、intlonglong longfloatdoublelong doublepointer が、それぞれの自然境界ではなく、2 バイト境界に整列されます。

n がプラットフォームで最も厳密な整列を指示する値 (Intel では 4、SPARC v8 では 8、SPARC v9 では 16) か、それより大きな値の場合は、自然境界整列が有効になります。n が省略された場合も、メンバーは自然境界整列に戻ります。

#pragma pack(n) 指令は、その指令から次の #pragma pack 指令の間のすべての構造体の定義に適用されます。別の翻訳単位で同じ構造体に対して異なる #pragma pack の定義が行われている場合、プログラムは予期しない形でコンパイルに失敗することがあります。特に、#pragma pack(n) は、事前にコンパイルされたライブラリのインタフェースを定義するヘッダーをインクルードする前には使用しないでください。#pragma pack(n) は、プログラムコード内の境界整列を変更するすべての構造体の直前に挿入することをお勧めします。そして、その構造体の直後に #pragma pack() を続けてください。