1

Linuxで以下のvc++パッキングコマンドをgccコマンドに変換するにはどうすればよいですか?単一の構造体に対してこれを行う方法を知っていますが、一連の構造体に対してこれを行うにはどうすればよいですか?

#pragma pack(push, 1) // exact fit - no padding
//structures here
#pragma pack(pop) //back to whatever the previous packing mode was
4

3 に答える 3

3

これを実現するために、個々のデータ項目に属性((パック))を追加できます。この場合、パッキングはデータアイテムに適用されるため、古いモードを復元する必要はありません。

例:構造の場合:

typedef struct _MY_STRUCT
{

}__attribute__((packed)) MY_STRUCT;

データメンバーの場合:

struct MyStruct {

    char c;

    int myInt1 __attribute__ ((packed));

    char b;

    int myInt2 __attribute__ ((packed));

};
于 2012-12-18T06:23:54.993 に答える
1

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

于 2012-12-18T06:20:04.427 に答える
1

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を参照してください

于 2012-12-18T06:22:58.937 に答える