Linuxで以下のvc++パッキングコマンドをgccコマンドに変換するにはどうすればよいですか?単一の構造体に対してこれを行う方法を知っていますが、一連の構造体に対してこれを行うにはどうすればよいですか?
#pragma pack(push, 1) // exact fit - no padding
//structures here
#pragma pack(pop) //back to whatever the previous packing mode was
Linuxで以下のvc++パッキングコマンドをgccコマンドに変換するにはどうすればよいですか?単一の構造体に対してこれを行う方法を知っていますが、一連の構造体に対してこれを行うにはどうすればよいですか?
#pragma pack(push, 1) // exact fit - no padding
//structures here
#pragma pack(pop) //back to whatever the previous packing mode was
これを実現するために、個々のデータ項目に属性((パック))を追加できます。この場合、パッキングはデータアイテムに適用されるため、古いモードを復元する必要はありません。
例:構造の場合:
typedef struct _MY_STRUCT
{
}__attribute__((packed)) MY_STRUCT;
データメンバーの場合:
struct MyStruct {
char c;
int myInt1 __attribute__ ((packed));
char b;
int myInt2 __attribute__ ((packed));
};
gccはこれらのプラグマもサポートします。次のコンパイラドキュメントを参照してください:http: //gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html
または、よりgcc固有のものを使用することもできます
__attribute__(packed)
例:
struct foo {
int16_t one;
int32_t two;
} __attribute__(packed);
http://gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/Type-Attributes.html
http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.htmlによると、gccは#pragma pack
直接サポートする必要があるため、そのまま直接使用できます。
gcc way
アラインメントを指定するのは、__attribute__((aligned(x)))
必要x
なアラインメントです。
__attribute__((packed))
密集した構造体を指定するために使用することもできます。
http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Type-Attributes.htmlを参照してください