看到很多媒体上都评论这本书怎么好,怎么好,我读过这本书,却没有感觉到任何令我惊喜的东西,很是失望。
当时我正在思考如何将C运用到实际项目中,而且自己也总结了一些方法,怎么模块化设计,如何借鉴面向对象的思想进行管理,如何接口与实现分开,如何处理错误等等,而且这本书中也确实提到了这些方面,一开始也确实令我很惊奇,心想,终于有可以切磋的对象了。
可是,我立马就很失望了。看到他其中封装的stack,list等数据结构,感觉还不如我的更优雅;费力气实现C的异常机制,却证明在实际项目中无法应用,很多东西不是不优雅,就是不适合实际应用,令我大为失望。
然而,在论坛上看到一篇分析linux c中某/linux文件夹中的库时,他的实现方式之优雅,之可扩展性,之广泛应用性,之简洁性令我大为惊喜,甘拜下风。因此如果真想了解如何将C语言应用到实际项目中,不如去读源代码,因为那是在实际的项目应用中逐渐磨练出来的。
话说,我比jockey的希望多一点,我多么希望我的代码在访问错误的地址时就崩溃阿。想一想,你有一个线程写了一些越界的数据,结果另一个线程在两个小时后某名奇妙的崩溃了...
话说,代码中存在像访问非法地址这样的代码,程序运行崩溃无疑是最棒的症状(比起程序跑得莫名其妙)。我多么希望我写的代码有任何bug,程序就崩溃啊... XD
用指针的话C++肯定也是直接崩溃,但是如果采用标准STL,很多错误,包括越界是会直接抛出异常的,比如at()
你上面给出的错误处理还是基于系统接口的,在语言层面上没有体现。
以系统程序为例,访问非法地址程序崩溃,其他并不怎么严重的情况可以自己处理。比如,最常见、最典型的一段代码:
pid = fork();
if (pid > 0) {
} else if (pid == 0) {
} else if (pid < 0) {
//fork出错,自己进行错误处理。
}
另外,访问非法地址崩溃应该是操作系统的要求。难道C++的异常机制还能保证访问非法地址不崩溃吗?
异常机制的提出,是为了解决错误处理中出现一些问题;异常是改进的错误处理。楼上的估计不知道吧。
但是,我不知道C的错误处理到底有什么缺点,可能有些人要求高,不好听的说就是吹毛求疵。
setjmp,longjmp基本上没用,C语言中用错误处理就很好了,非得搞面向对象的那一套异常机制,无异于脱裤子放屁,多此一举。
Unix操作系统核心代码可以做教科书了吧?系统调用,库函数的实现也可以做教科书了吧?
它们压根就不用什么异常。仅仅简单的提供了一个全局变量errno和一个库函数strerror用于把错误号转化成错误信息。
linux的链表实现确实不错,可是却用到了gcc的编译器特性,我没有用过其他的编译器,不知道别的编译器是否有类似的特性。但是作者在写书的时候却要考虑这些问题,因此作者的代码必然是通用的、编译器无关的。作者的代码看似没有linux的链表实现“聪明”,恐怕是因为考虑了更多的东西。
况且linux的链表实现是hacking的方式,只能说是很聪明,未见得多优雅。
Stevens推荐的书还会错, 只能说你太功利了, 只想copy&paste, 这本书是讲如何设计库的, 例如如何用标准C的setjmp、longjmp来实现类似WIn32 SEH的异常处理机制;内存管理实现细节;常用容器、字符串操作;线程库的实现细节;很少有书讲这些东西。这是本授人以渔的书。