来源:www.cncfan.com | 2006-4-28 | (有3536人读过)
“C语言是严肃的程序员语言,但这并不意味着C语言书籍必须板着面孔说教。在这本被C程序员昵称为“鱼书”(封面上有一条“丑陋的”腔棘鱼)的著作中,作为SUN公司编译器和操作系统核心开发组成员之一,Peter淋漓尽致地展示了其深厚的技术沉淀、丰富的项目经验、高超的写作技巧以及招牌式的幽默。在这部作品中,作者以流畅的文字、诙谐的笔法将逸闻典故、智慧和幽默自然地融入技术描述中,读来宛若一本小说,极富趣味。”
这是《C程序设计之四书五经》文中对《C专家编程》一书的评述。
下面摘录几段书中的精辟言论:
C语言的许多其他特性是为了方便编译器设计者而建立的。
当宏被用于通用代码模板扩展时,多少显得有些笨拙。 对于宏这样的预处理器,只应该适量使用,所以无须深入讨论。 C++在这方面引入了一些新的方法,使得预处理器几乎无用武之地。
在C语言里,几乎从来不进行运行时错误检查。运行时检查与C语言的设计理念相违背。 按照C语言的理念,程序员应该知道自己正在干什么,而且保证自己的所作所为是正确的。
如果函数的调用者提供了一个指向堆栈的指针,并且gets()函数读入的字符数量超过了缓冲区的空间,gets()将会愉快地将多出来的字符继续写到堆栈中,这样就覆盖了堆栈原先的内容。
当编译器注意到库函数被另外一个定义覆盖时,它通常不会给出错误信息。 这也是遵循C语言的设计哲学,即程序员所做的都是对的,这样做是程序员的意图。
a.out是“assembler output(汇编程序输出)”的缩写形式。 但是它是由链接器输出的,而不是汇编程序,这是因为这个名字是被沿用的。 缺省使用a.out这个名字是UNIX“没什么理由,但我们就是这样做的”思维的一例。
billion在美式英语中表示十亿,而在英语中,它表示一万亿,所以英国的billionarie比美国的要富有得多——除非两国货币汇率变成100英镑兑换1美元。
我们使用“内存泄漏”这个词是因为一种稀有的资源正被一个进程榨干。 内存泄漏的主要可见症状就是罪魁进程的速度会减慢。
大多数的问题都是出于这样一个事实:错误就是操作系统所检测到的异常,而这个异常是尽可能地以操作系统方便的原则来报告的。
总线错误意味着CPU对进程引用内存的一些做法不满,而段错误则是MMU对进程引用内存的一些情况发出抱怨。
Donald Knuth教授多年来一直执教于斯坦福大学,他撰写了The Art of Computer Programming这部参考价值极高的宏幅巨著,并设计了TeX排版系统。 Knuth教授后来确认,The Art of Computer Programming书名中的“Art”是指与他长期同事的Art Evans。
如果把我搁浅到一个荒岛上,并只被允许带一种数据结构,那我毫无疑问选择散列表。
有些人认为它之所以命名为强制类型转换是因为它们可以把有些东西变得不完整。
当人们学习编程时,一开始总是把所有的代码都放到一个函数里。 随着水平的进步,他们把代码分别放在几个函数中。 在水平继续提高后,他们最终学会了如何用几个文件来构造一个程序。
向函数传递数组前面一个位置的地址(a[-1]),这样就可以使数组下标从1到N,而不是从0到N-1。 不幸的是,这个手段完全为标准所不容,所以你千万不要告诉别人是我告诉了你这个方法。
|