gpt4 book ai didi

c - 获取结构中零长度数组元素类型的大小

转载 作者:行者123 更新时间:2023-12-04 11:44:46 24 4
gpt4 key购买 nike

也许标题令人困惑,但想法很简单。给定以下结构:

struct z {
uint64_t _a;
uint64_t _b;
struct {
char _c[64];
uint64_t _d;
} data[0];
} __attribute__((packed));

如何获得匿名内部结构数据类型的大小?我不想命名结构并弄乱命名空间,但在计算带有非零 data 预告片的序列化缓冲区的总长度时,我确实需要它的大小。

If you try this你会发现类似于:

struct z *p;
sizeof(struct z) == 16
sizeof(*p) == 16
sizeof(p->data) == 0

这些结果是意料之中的。然而,我希望看到的是:

sizeof(typeof(p->data)) == 72

但是,不幸的是,我还是得到了

sizeof(typeof(p->data)) == 0

我认为这可能是因为该结构未命名,但在为其提供名称后,您会发现之前的结果仍然正确。

有没有办法获取匿名内部零长度结构的大小?

最佳答案

我会使用:

sizeof(p->data[0])

因为它在 sizeof 内部,因此没有被评估,p->data[0] 实际上并没有取消引用 p->data。编译器只计算出类型。

关于c - 获取结构中零长度数组元素类型的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58974553/

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