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

您所在的位置:网站首页 iar头文件一般是放在哪里 【转】结构体定义在头文件.h中和定义在.c中的不同考虑

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

2024-07-12 08:14| 来源: 网络整理| 查看: 265

在学习开源的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,但一般来说既然定义了结构,多半还是要暴露出来的.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3