如何在 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
您可以将属性((packed)) 添加到各个数据项以实现此目的。在这种情况下,对数据项应用打包,因此无需恢复旧模式。
例如:对于结构:
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