C语言模块化编程中如何隐藏结构实现细节

来源:互联网 发布:冰月ce源码 编辑:程序博客网 时间:2024/05/16 08:52
经常看到有人为了隐藏结构体的实现细节煞费苦心,故本文简单介绍一下如何用简单
有效的方法实现隐藏;

C语言模块化编程典型的模块文件结构是这样的:

// module.h#ifndef  MODULE_INCLUDED#define  MODULE_INCLUDEDstruct Module_T{   Module_T* link;   void*     data;};extern  Module_T*  Module_new();extern  Module_T*  Module_free(Module_T** module);extern  void       Module_push(Module_T* module, void* data);extern  void*      Module_pop(Module_T* module);#endif// module.c#include<stddef.h>#include<stdlib.h>#include"module.h"Module_T*  Module_new(){...}Module_T*  Module_free(Module_T** module){...}void       Module_push(Module_T* module, void* data){...}void*      Module_pop(Module_T* module){...}

但是上面的写法并没有隐藏掉struct Module_T的具体实现;
隐藏掉该实现的方法如下:

/ module.h#ifndef  MODULE_INCLUDED#define  MODULE_INCLUDED#define  T Module_Ttypedef struct T *T;extern  T  Module_new();extern  T  Module_free(T* module);extern  void       Module_push(T module, void* data);extern  void*      Module_pop(T module);#undef T#endif// module.c#include<stddef.h>#include<stdlib.h>#include"module.h"#define T Module_Tstruct T{   int length;   struct elem   {   struct elem* link;       void*       data;   }* element;};T  Module_new(){...}T  Module_free(T* module){...}void       Module_push(T module, void* data){...}void*      Module_pop(T module){...}



原创粉丝点击