portable __attribute __((__ package ___))

时间:2012-04-27 15:35:10

标签: c++ c portability

是否有便携式等效__attribute__ ((__packed__))

(通过便携性,我的意思是在PC,Android和iPhone上工作,无论架构如何)

2 个答案:

答案 0 :(得分:4)

根据定义,__attribute__是不可移植的。如果您希望数据采用特定方式,Plan9解决方案通常是在您的结构中使用unsigned char数组:

struct foo {
    uchar data1[4];
    uchar other[2];
}

通常不会有任何对齐,因为它基本上使用无符号字符。当然,如果你对疼痛有很高的耐受性,你总是可以使用enum的抵消:

enum { FOO_DATA1=0, FOO_OTHER=4, FOO_LAST=6 };

然后你可以这样加载它:

unsigned char foo[FOO_LAST];
uint32_t n = htonl(val)
memcpy(foo+FOO_DATA1, &n, sizeof n)
memcpy(foo+FOO_OTHER, &some_16_bit_val, sizeof some_16_bit_val)

只要你有胃,就可以完全携带。

答案 1 :(得分:1)

没有。结构打包和填充不是C ++语言规范的一部分(它属于平台ABI),因此处理它的任何内容本身都在语言之外。