gpt4 book ai didi

C99: union 内部的灵活数组?

转载 作者:太空狗 更新时间:2023-10-29 17:25:05 24 4
gpt4 key购买 nike

我试图将一些东西从使用 struct hack 转换为使用灵活的数组成员,结果却遇到了以下错误消息:

error: invalid use of structure with flexible array member

(海湾合作委员会 4.8.1、gnu99、MinGW)

在尝试追踪消息的原因后,我将其提炼为以下相对最小的情况:

struct a {
union {
struct {
int b;
int c[];
} d;
} e;
};

换句话说,具有灵活数组成员的结构不能放入结构的 union 内,即使 union 是结构的最后一个成员也是如此。

(请注意,将灵活的数组成员直接放在 union 内确实似乎可行。)

现在:除了恢复到 struct hack(将 c 声明为长度为 1 的数组)之外,还有什么好的方法可以解决这个问题吗?指向 union 内部结构的指针可以工作,但会受到额外的间接层的影响。

最佳答案

C11 标准 (ISO/IEC 9899:2011) 说:

§6.7.2.1 Structure and union specifiers

¶18 As a special case, the last element of a structure with more than one named member mayhave an incomplete array type; this is called a flexible array member.

在您的示例中,struct a 的最后一个成员不是灵活的数组成员。它是一个 union,包含一个具有灵活数组成员的 struct

不过,您必须非常努力地让 gcc 提示;它需要编译器选项中的 -pedantic

关于C99: union 内部的灵活数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108813/

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