【转】结构体定义在头文件.h中和定义在.c中的不同考虑

本文探讨了在C语言中结构体应如何合理地在H或C文件中定义,以提高代码的复用性和降低编译成本。通过分析结构体的全局性和可见性,建议将结构体、枚举等公共组件定义在H文件中,而将局部或辅助结构体定义在C文件中。此外,文章还强调了接口隐藏细节的重要性,并提供了结构体在不同场景下的定义建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习开源的LZ77-neoben时,看到有的结构体(如struct header)定义在对应头文件中,而结构体struct bitbuf定义在.c文件中。就不明白这是什么考虑了。因为感觉定义在头文件中很方便呀。


C语言中对于结构的定义一般放在.h中还是.c中

http://www.oschina.net/question/999013_92593?sort=default&p=1     点击打开链接

——如果其可见性超出一个.c文件,那么应当放入.h中,如果只是某个.c里需要这么一个结构作为辅助,直接放入这个.c中更好一些。 .h的影响范围更大,如果有修改的话所有依赖的文件都要重新编译,会影响编译效率,主要就是基于这个考虑

——放在.h里不是为了可读性更高。

你可能认为放在.c文件中,一看就可以看到,但是稍微好用点儿的编辑器,如:sourceinsight,vi等等,都可以做到跳转,很方便阅读。

假设你要和其他模块传递数据,你定义了一个结构体,然后放在common.h(假设有这个文件),别人在解析你传来的数据的时候,只需要在他的代码里#include "common.h"即可使用该结构体,试想一下,如果你放在.c文件中,别人该怎么办呢?难道#include 你的.c文件?太扯了吧。

综合来说,
1.全局变量一般都用static包裹,然后提供配套的set和get接口给别人调用,放在.c文件中。
2.结构体、枚举、宏(名字尽量复杂点,避免和别人的宏重复)、定义放在.h中,可以让别人include,提高代码的复用率。
这是我个人的理解,可能很多地方没说全,或者说错,请见谅。


—— .h可以typedef struct foo *foo;

.c里去实现这个结构体

主调用文件可以以类似函数接口的形式操作struct foo,这样结构体就可以保持在主调用文件中的可见性了 

可以看看 C Interfaces and Implementations这本书


——头文件中定义的是模块的接口(函数原型)。

对应的C文件中是对应模块的函数原型的实现。

如果某个结构体 会在 用这个模块的程序中出现。那需要定义在.h文件。(或者说,需要被模块外的程序访问)

如果某个结构题仅仅是在 函数原型实现中(对应的C文件中)才用到,那最好写在.c文件中。


——提供给别人的接口越隐藏细节,接口越简单,耦合越少,越容易修改。但是把结构体定义在.c文件使用的人就不能在栈上分配内存了。


——放c还是h取决于该结构是否要暴露给其他c,原则就是能放c绝不放h,但一般来说既然定义了结构,多半还是要暴露出来的.


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值