gpt4 book ai didi

c - 指向 C 中前向声明结构数组的指针

转载 作者:行者123 更新时间:2023-12-05 00:44:39 29 4
gpt4 key购买 nike

我对 C 中的前向声明有疑问。

代码

typedef struct yhash_s t_yhash;// forward declaration
struct yhash_s {
size_t size_h;
t_yhash (*yhash)[];// pointer to array of structures
};

使用 gcc 编译代码后,它会提示:

错误:数组类型具有不完整的元素类型“t_yhash”{又名“struct yhash_s”}

我明白 t_yhash不知道(尚)并且无法计算数组的大小,但我正在询问指向未知大小的数组的指针,恕我直言,这应该是完全可解析的。

如何修复该前向声明和结构本身?

最佳答案

问题是数组声明器可能没有不完整的类型作为元素类型(C11 6.7.6.2/1)。和t_yash (即 struct yhash_s )直到结构定义的右大括号才完成。

该规则还负责另一件琐事;拥有(在结构定义完成之前)是合法的:

void func( t_yhash *a );

但不合法拥有:
void func( t_yhash a[] );

即使调整规则对于不完整的元素类型规则也可以正常工作。

或许可以通过改进这条规则来稍微改进语言设计以允许一些情况,比如函数原型(prototype),但这显然不是语言设计委员会提出的。

但即使没有这条规则,你的用例也可能有另一个问题;指针的大小可能未知。 “指向结构 X 数组的指针”具有与“指向结构 Y 数组的指针”不同的大小是合法的(尽管在实践中不太可能)。有一条规则是所有指向 struct 的指针必须具有相同的大小,但对于指向数组的指针则没有这样的规则。

关于c - 指向 C 中前向声明结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724078/

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