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

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

例如:对于结构:

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 回答