gpt4 book ai didi

c - union 中的并行数组与严格别名有何关系?

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:47 25 4
gpt4 key购买 nike

给定一个像这样的 union :

union {
uint16_t halfwords[32];
uint32_t fullwords[16];
} my_union;

严格别名规则对 eg 有什么看法

my_union.fullwords[0] = 1;
printf("%d", my_union.halfwords[1]);

出于严格别名规则的目的,my_union.halfwords[1] 是否被认为是对 union 部分的合法访问,或者它是否被认为采用恰好指向的地址通过 halfwords 的第一个元素,然后执行对该地址的非法 uint16_t 读取(然后编译器可以接受它作为邀请来做任何它想做的事情)。

从语义上看,任何理智的编译器都拥有将其识别为 union 成员所需的所有信息,但标准中是否有任何内容要求编译器这样做?

如果有必要将一个数组或其中的一部分传递给另一个函数,是否仍然可以通过 Union 访问另一个数组?

如果有必要将一个数组传递给一种方法,而将另一个数组传递给另一种方法,是否可以在这些操作之间执行任何有效的操作以确保编译器认为不违反严格的别名?

最佳答案

那确实是允许的。在 C 中,C11 标准明确允许类型双关。

如果您想更好地阅读本文,请参阅 here

Ps:不要点赞,我发布这个只是为了能见度,这个内容不是我自己想回答的,而是我在提供的链接中阅读的内容的摘要。

编辑:我找到了 this解释,这看起来大致就像你在找什么。它至少意味着您可以通过 union 直接写入数组。

关于c - union 中的并行数组与严格别名有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095622/

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