在网上看过一篇文章叫《c编程的四书五经》,中间就包括这本书。我推荐要好好研究c的朋友好好看看这本书。这本书用c进行数据结构的封装。其基本思想就是一个数据结构和围绕它操作的一族函数。只要学过c语言的人,对于自己封装这样的链表或堆栈一定觉得不是难事,但是很少有人像本书作者做的如此通用。这本书是lcc的作者写的,其源码可以在国外的网站下载到,china-pub有链接。
书中对atom,list,stack,hashtable,set,ring,exception等都作了探讨。相信看过这边书后,你使用c编程的功力会大为提高。也许使用c++的朋友会认为这些c++的标准模板库都可以实现,因此对c封装这些不屑一顾。但是即使是c++程序员,我相信你看过本书后,就不会这么认为了,这些对写好c++代码也同样有好处。反正我是用STL后就变得很懒,什么数据结构都向STL靠,这可不是很好。网上有篇文章流传的很广,叫做《lua让我脸红》,为什么呢?因为lua编译器和虚拟机就是用纯c实现的。一个能把c写得如此优雅的人,你可以想到他写起c++来会怎么样。打开lua的源码,你会发现,一个全局变量都没有,代码非常简洁。lua编写就很有本书的思想。比如lua里面的字符串,全部都存在hashtable中,TSring存储的只是对hashtable的“引用”,比较字符串只需要比较地址就可以了。这个方法就是本书中的atom.
这本书还用setjmp,longjmp实现了一个c的异常机制,setjmp,longjmp在一般的c语言书中介绍的很少,看过之后,我对异常机制也有了更深的理解。
对于va_start,va_end这些函数,书中也有详细的讲解,如何封装成自己的format(如printf)函数。
有很多底层的函数,c标准库中的函数,本书都有实现,如itoa,还有字符串函数等。不要说这是重造轮子,这些有用得着的时候。
内存管理一向是大难题,对此,本书用两章内容探讨了自己封装内存管理函数,包括内存池的使用。
最好用一段代码结束:(fn是函数指针)
#define base int a;int b; int c;FN fn
struct derive1
{
base ;
int d;
};
struct derive1
{
base ;
int e;
};
是不是有点面向对象的味道?看过本书,你写出c来就不是那么乱遭遭了。