是否可以在C中使联合右对齐?

例如,联合的默认对齐方式如下:

union{
   uint32_t v4;
   __uint128_t v6;
}ip;

//in memory
//aaaa
//bbbbbbbbbbbbbbbb

但我想让工会正确对齐:

//            aaaa
//bbbbbbbbbbbbbbbb

是否有可能在 C 中实现这一点?

回答

您可以为此使用 C11 匿名结构。

union {
#pragma pack(1)
    struct {
        char padding_[sizeof(__uint128_t) - sizeof(uint32_t)];
        uint32_t v4;
    };
#pragma pack(0)
    __uint128_t v6;
} ip;

// usage
ip.v4 = 0x7F000000;

  • I suggest to add attribute 'packed' to ensure that no implicit padding bytes were added

以上是是否可以在C中使联合右对齐?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>