今天开始看李先静写的《系统程序员成长计划》,按照他的要求写了个双向循环链表,自认为封装的挺好的了啊,但是看到里面写的关于封装的内容后,自己按照他说的和我不一样的地方封装了下。结果问题就出来了,在这里写下,给新人看下,希望以后注意。
《系统程序员成长计划》里的封装内容如下(只是一部分):
- 在头文件里声明该数据结构
- 在C文件中定义该数据结构
- 提供操作该数据结构的函数,哪怕只是存取数据结构的成员,也要包装成相应的函数
- 提供创建和销毁函数。
我的问题就出现在了第三点上,我没有把访问数据结构中的成员函数写到C文件里。而是在使用链表时直接用结构体中的变量。因此编译时出现了“dereferencing pointer to incomplete type”这个错误。而这个问题以前我也遇到过,但当时修改的都是将结构体定义在了头文件里。但今天又出现了这个问题我就仔细想了下问题所在。这才明白了为什么别人很多代码有那么多函数用来返回结构体的变量。
而我还在想这样写有必要吗,直接写道头文件里不就行了啊。可是注意到,在Linux下当没有开发手册时完全可以在/usr下找到其头文件,然后根据注释就能明白函数是做什么的了啊。而如果将数据结构的定义放在了头文件中,就有可能将这个数据结构修改,这样就造成了安全隐患。
想到这我也就明白了为什么要这样封装,这样封装的好处。我想以后就不会再出现这样的错误了,从而让我的代码更安全。
阅读(1464) | 评论(0) | 转发(0) |