gpt4 book ai didi

c - 结构中成员的顺序重要吗?

转载 作者:太空狗 更新时间:2023-10-29 16:15:55 24 4
gpt4 key购买 nike

我在 C 中发现了一个特殊的行为。考虑下面的代码:

 struct s {
int a;
};

struct z {
int a;
struct s b[];
};

int main(void) {
return 0;
}

它编译得很好。然后像这样改变结构z成员的顺序

struct z {
struct s b[];
int a;
};

突然间我们得到了编译错误field has incomplete type 'struct s []'

这是为什么?

最佳答案

struct 中字段的顺序很重要 - 编译器不允许对字段重新排序,因此 struct 的大小可能会因添加一些字段而改变填充。

但是,在这种情况下,您要定义一个所谓的灵活成员,这是一个您可以更改其大小的数组。灵活成员的规则是

  • 这样的成员永远不会超过一个,
  • 如果存在,灵活成员必须是struct中的最后一个成员,并且
  • struct 除了灵活的成员外,还必须至少有一个成员。

看看this Q&A有关使用灵活结构成员的小示例。

关于c - 结构中成员的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818011/

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