应该在C中声明一个struct的定义应该在哪里? .c或.h?
在C中实现ADT时,我总是认为struct
的定义应该在.c
文件中,以便它是私有的。并且typedef
应放置在.h
文件中,以便其他模块可以使用ADT,但无法直接修改其属性。 我最近遇到了一个问题,我不得不将结构移动到.h
。我还找到了一个答案Error: In C, got the error "dereferencing pointer to incomplete type" in a struct pointer,据说struct
应该在.c
文件中定义。这是真的?如果是这样,原因是什么?应该在C中声明一个struct的定义应该在哪里? .c或.h?
回答:
正如我所提到的一个comment:
用于ADT的结构定义通常应在源(.c
)文件定义了支持功能,只有类型的声明应该在头存在( .h
)文件。
但是,这意味着您不能在定义ADT的源文件之外分配结构的实例。您只能在外面定义指向ADT的指针。
如果您必须将定义从源代码移动到头文件,那意味着某些东西没有使用应该使用指针的指针。返回并修复损坏的代码,然后将结构定义移回到ADT的源文件中。
而且,确认在comment中记录了什么Nevado,这也意味着您不能拥有ADT数组;你可以有指向ADT的指针数组,但不是ADT本身的数组。
请注意,如果这是您希望或需要做的事情,那么公开结构是完全合法的。然后,您可以创建数据类型或其数组的变量,或者在其他结构中嵌入类型(而不是指向该类型的指针)等。编写使用结构的代码的程序员可以看到细节,并可以直接访问(读取或修改)结构元素。谨慎的程序员不会做这些不必要的事情,但它会带来严格的ADT习惯用法排除的可能性 - 冒犯错误的风险。
以上是 应该在C中声明一个struct的定义应该在哪里? .c或.h? 的全部内容, 来源链接: utcz.com/qa/259362.html