如何将以下vc ++打包命令转换为Linux中的gcc命令?我知道如何为单个结构执行此操作,但是如何为一系列结构执行此操作?
#pragma pack(push, 1) // exact fit - no padding
//structures here
#pragma pack(pop) //back to whatever the previous packing mode was
答案 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