在许多情况下,我发现我想以联合身份访问原始数据,但是我不想计算大小,或者想保持大小灵活。
例如(有点人为,但我希望它传达了这个想法),如果我更改othertype_t的外观,我不想调整raw的大小:
#pragma pack(push, 1)
typedef union {
uint8_t raw[0];
struct {
uint8_t bar[32];
othertype_t foo[4];
};
} sometype_t;
#pragma pack(pop)
以后我可以做类似
sizeof(union sometype_t)
的事情来了解raw
的大小。使用raw [0]可以工作,但我知道这是gcc非标准扩展名。我该如何以更便携的方式进行操作?
作为一个“技巧”,我可以做类似
raw[1]
的操作,但是感觉有点误导。更新:
有人指出这是C ++中未定义的行为。您能否提供一些有关此的其他信息?
最佳答案
也许
typedef union
{
struct _struct
{
uint8_t bar[32];
othertype_t foo[4];
};
uint8_t raw[sizeof(struct _struct)];
} sometype_t;
关于c - 原始访问 union 数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51799851/