编译如果不通过,这个首先要看你的编译器是否支持,如果支持,不同编译器的格式也有点不同,你要看编译器的文档具体是如何定义和使用的 。
一般有这样的
typedef __packed struck test_s
{
...
}test_t;
还有这种样子的
typedef struck __attribute__((packed)) test_s
{
...
}test_t;
其实__packed或者__attribute__((packed))关键字的作用就是用来打包数据的时候以1来对齐,你比如说用来修饰结构体或者联合体的时候,那么这些成员之间就没有间隙(gaps)了。如果没有加,那么这样结构体或者联合体就会以他的自然对齐方式来对齐。比如某CPU架构的编译器默认对齐方式是4, int的size也是4,char的size是1,那么类似
typedef __packed struck test_s
{
char a;
int b;
}test_t;
这样定义的结构体的size就是8个字节了。
如果加上packed,size就会变成5个字节,中间是没有gaps的。