gpt4 book ai didi

c - 用 char 数组成员填充 union

转载 作者:行者123 更新时间:2023-12-01 20:22:42 25 4
gpt4 key购买 nike

我有一个包含许多字段的 C union 体,这些字段很可能在不同平台上具有不同的大小:

union foo {
int a;
wchar_t b;
bar *c;
baz d;
}

现在我想向这个 union 添加一个 char 数组,它的大小与我可以做到的一样大,而不会导致整个 union 变大。一些单独的线条

union foo {
...
char z[sizeof(union foo)];
}

当然,除非它无法编译,因为当时还不知道 union foo 的大小。

有没有一个技巧可以让我用字符数组“填充” union ?

最佳答案

嗯,有:

union bar {
union foo {
int a;
wchar_t b;
bar *c;
baz d;
} f;
char z[sizeof(union foo)];
};

它获得了正确的大小,但是在访问其他成员时您必须坚持使用f.

据我所知,如果没有f,就无法做到这一点。不过,正如 user1969104 所建议的那样,可能有更好的解决方案来解决您的问题。

这是一个丑陋的黑客:

#define UNION_FOO_Z(u) ( *(unsigned char (*)[sizeof(union foo)])&u )

用法:

union foo f;
printf("%zu\n", sizeof UNION_FOO_Z(f));

此 hack 可能存在对齐问题(尽管不太可能)。

关于c - 用 char 数组成员填充 union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com