移植可能な同等物はありますか __attribute__ ((__packed__))
(移植性とは、アーキテクチャに関係なく、PC、Android、および iPhone で動作することを意味します)
移植可能な同等物はありますか __attribute__ ((__packed__))
(移植性とは、アーキテクチャに関係なく、PC、Android、および iPhone で動作することを意味します)
定義上、__attribute__
は移植性がありません。データに特定の方法が必要な場合、Plan9 ソリューションは通常unsigned char
、構造内で配列を使用することです。
struct foo {
uchar data1[4];
uchar other[2];
}
基本的に符号なし文字を使用しているため、通常はアライメントはありません。もちろん、痛みに対する許容度が高い場合は、いつでもenum
of オフセットを使用できます。
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)
お腹さえあれば、完全に持ち運び可能です。
いいえ。構造のパッキングとパディングは C++ 言語仕様の一部ではありません (プラットフォーム ABI に属しています)。