gpt4 book ai didi

c - 使用结构的成员变量之一分配结构内数组的长度是否可行?

转载 作者:行者123 更新时间:2023-12-05 01:32:17 25 4
gpt4 key购买 nike

我正在尝试在结构中创建一个数组,如下所示:

struct __attribute__((__packed__)) INIT_HEADER
{
uint16_t rounter_n;
uint16_t update_interval;
uint16_t router_IDs[rounter_n];
...
...
}

这实际上将转换为一个字符串,我将从中单独提取每个字段。该字符串将具有与路由器数量一样多的 router_ID(和其他详细信息)。

基本上,前 32 位是不重复的。其余的是重复的,重复的次数与路由器的数量一样多。请引用下图。

Image

我希望能够创建一个结构,它可以根据路由器的数量有效地转换到这个字符串上。

最佳答案

VLA 作为结构的一部分是无效的。 GCC 对此有一个扩展(如果您想搜索它和围绕它的争议,则称为 VLAIS)但据我所知,它仅对在函数内使用 block 作用域声明的结构类型有效,并且大小不是从struct 成员,而不是来自在结构进入范围时评估的某些表达式(例如,基于函数中的局部变量)。

无论如何,您采用的方法不可移植且风格不佳。 clang/LLVM 不(并且不会,他们拒绝,可以说是非常好的理由)支持 VLAIS,并且“打包”结构不可移植并且无论如何都有很多陷阱。从风格/最佳实践的角度来看,您应该只编写适当的序列化/反序列化函数来处理数据流,而不是试图将外部数据视为 C 类型。

关于c - 使用结构的成员变量之一分配结构内数组的长度是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383214/

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