編譯如果不通過,這個首先要看你的編譯器是否支持,如果支持,不同編譯器的格式也有點不同,你要看編譯器的文檔具體是如何定義和使用的 。
一般有這樣的
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的。
