是否存在的__attribute__ ((__packed__))
便攜式__attribute__((__packed__))
便攜式當量(以便攜性我的意思是在PC,Android和iPhone的合作,無論架構)
是否存在的__attribute__ ((__packed__))
便攜式__attribute__((__packed__))
便攜式當量(以便攜性我的意思是在PC,Android和iPhone的合作,無論架構)
根據定義,__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)
只要你有它的胃,它將是完全便攜的。
謝謝,我實際上正在爭取第一個解決方案。我不知道它對Plan9的具體情況 – 2012-04-27 15:52:55
號結構的包裝和填充不部分的C++語言規範(它屬於平臺ABI),所以處理它的任何內容都在本質上在語言之外。
即使對齊確實涉及到平臺ABI,現在它是標準的一部分。打包是另一個不合標準的原因,編譯器開發人員基本上被迫添加非標準擴展來提供它。 – ceztko 2017-06-13 21:32:46
簡單的回答:沒有。 – bmargulies 2012-04-27 15:37:53
@bmargulies:實際上,C++ 11中的'alignas'使得它更簡單 – KillianDS 2012-04-27 15:59:39
噢,好吧。我把它留作評論,因爲我害怕這樣的事情。 – bmargulies 2012-04-27 16:05:01