我不确定代码是否在断言转换中具有指针别名(或其他标准一致性问题).似乎指向联合类型的指针应该能够转换为第一个成员的指针,因为联合只由这两个结构组成,我认为对第一个成员的强制转换应该有效,但我不是确定这是否正确,或者我是否在过程中掩盖了填充细节.工会是否需要填补高位?
似乎这是未指明的行为?有没有人知道这是否被支持.我知道有一种替代的标准方法可以通过使用带有enum type字段和struct container_storage成员的结构来实现这一点,但考虑到此信息已经存在,这似乎是浪费空间struct contained
linux中的编译命令:gcc -std=c99 -Wextra -pedantic -fstrict-aliasing test.c && ./a.out && echo $?返回0
#include <stdlib.h>
#include <assert.h>
enum type {type_a = 1, type_b = 2};
struct contained {
int some_other_field;
enum type type;
};
struct container_a {
struct contained contained;
int test;
};
struct container_b {
struct contained contained;
char test;
};
union container_storage {
struct container_a container_a;
struct container_b container_b;
};
int
main(int argc, char **argv)
{
union …Run Code Online (Sandbox Code Playgroud)