如何封装
1.在头文件中声明外部需要看到的数据结构,而具体的实现放在.c文件中具体实现。
比如在头文件中:
typedef enum _DListRet
{
DLIST_RET_ERROR,
DLIST_RET_OK,
DLIST_RET_NULL,
DLIST_RET_PARAMETER
}DListRet;
struct _DList;
typedef struct _DList DList;
enum 类型方便查阅。
而DList类型仅在.h文件中声明,具体定义在.c文件中实现。
2.在头文件中提供操作该数据结构的接口声明。
3.将外部不需要的函数、而.C文件需要使用的函数的声明和定义都放在.c文件中,并且加上static
4.禁止使用全局变量(除了单例模式)
5.数据结构中的数据部分要考虑到通用性
此处采用了void*类型
6.操作数据结构的接口要考虑通用性
接口的具体功能是由外部需求决定的,而不是随意想象的,具体开发中可以按照测试驱动的方式来编写代码,可以提高效率。
7.让C++可以直接调用的方法
在.h文件中如下
#ifdef __cplusplus
extern "C"{
#endif
代码
#ifdef __cplusplus
}
#endif
8.采用函数指针拥抱变化
比如打印void*数据,提供函数指针,具体如何打印由客户端提供。
代码下载地址: