C/C++語言中struct結構體定義中__packed的作用是


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM