我试图将某些东西从使用 struct hack 转换为使用灵活的数组成员,结果却遇到以下错误消息:
错误:使用灵活数组成员的结构无效
(GCC 4.8.1, gnu99, MinGW)
在尝试追查消息的原因后,我将其提炼为以下相对最小的情况:
struct a {
union {
struct {
int b;
int c[];
} d;
} e;
};
换句话说,即使联合是结构的最后一个成员,具有灵活数组成员的结构也不能放入结构中的联合内。
(请注意,将灵活的数组成员直接放在联合中似乎确实有效。)
现在:除了恢复到 struct hack(将 c 声明为长度为 1 的数组)之外,还有什么好的方法可以解决这个问题?指向联合内部结构的指针可以工作,但会受到额外的间接层。