Everything

構造体のパッキング(#pragma pack/#pragma unpack) 【V1.05以降】


構造体のパッキングを指定します。

[機能]

-

#pragma pack指定位置以降で宣言された構造体に対し,構造体をパッキングします。構造体メンバのアライメントを1にします。

-

#pragma unpack指定位置以降で宣言された構造体に対し,構造体をパッキングしません。

-

オプション-packと#pragma unpackを同時に指定した場合は,#pragma unpackを優先します。

[方法]

-

構造体の宣言より前で#pragma pack/#pragma unpackを宣言します。

#pragma pack
#pragma unpack

[使用例]

#pragma pack
struct s1 {
  char a;
  int b;    // アライメントを1にします
} st1;
#pragma unpack
struct s2 {
  char a;
  int b;    // アライメントを1にしません
} st2;

[制限]

-

同一の構造体に対し,パッキング指定の異なるCソース・ファイルが混在した場合,動作を保証しません。

-

#pragma packによって整列条件が2バイトから1バイトになった構造体,共用体,または,それらのメンバのアドレスを,標準ライブラリ関数の実引数として渡した場合,動作を保証しません。

-

#pragma packによって整列条件が2バイトから1バイトになった構造体,または共用体メンバのアドレスを,整列条件が2バイトである型のポインタに渡して間接参照した場合,動作を保証しません。