如何将struct packing从vc ++翻译成gcc

时间:2012-12-18 06:08:47

标签: c++

如何将以下vc ++打包命令转换为Linux中的gcc命令?我知道如何为单个结构执行此操作,但是如何为一系列结构执行此操作?

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

3 个答案:

答案 0 :(得分:3)

您可以将属性((打包))添加到单个数据项中以实现此目的。在这种情况下,打包应用于数据项,因此无需恢复旧模式。

Ex: 对于结构:

typedef struct _MY_STRUCT
{

}__attribute__((packed)) MY_STRUCT;

对于数据成员:

struct MyStruct {

    char c;

    int myInt1 __attribute__ ((packed));

    char b;

    int myInt2 __attribute__ ((packed));

};

答案 1 :(得分:1)

gcc也支持那些pragma。请参阅以下编译器文档: 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

答案 2 :(得分: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