前言
C代码。C代码运行。运行码运行……请!
——Barbara Ling
所有的C程序都做同一件事,即观察一个字符,然后啥也不干。
——Peter Weinberger
你是否注意到市面上存有大量的C语言编程图书,它们的书名具有一定的启示性,如C Traps and Pitfalls、The C Puzzle Book、Obfuscated C and Other Mysteries等,而其他的编程语言好像没有类似这种书名的图书。这里有一个很充分的理由!
C语言编程是一项技艺,需要多年历练才能达到较为完善的境界。一个头脑敏捷的人很快就能学会C语言中的基础知识。但要想品味出C语言的细微之处,并通过大量编写各种不同的程序成为C语言专家,则耗时甚巨。打个比方说,这是在巴黎点一杯咖啡与在地铁里告诉土生土长的巴黎人该在哪里下车之间的差别。本书是一本关于ANSI C编程语言的高级读物。它适用于已经编写过C程序的人,以及那些想迅速获取一些专家观点和技巧的人。
编程专家在多年的实践中建立了自己的技术工具箱,里面是形形色色的习惯用法、代码片段和灵活掌握的技巧。他们汲取其他成功者的经验教训,或是直接领悟他们的代码,或是在维护其他人的代码时聆听他们的教诲,随着时间的推移,逐步形成了这些东西。成为C编程高手的另一种途径是自省,即在认识错误的过程中进步。几乎每个C语言编程新手曾犯过下面这样的书写错误:
if(i = 3)
正确的写法应该是:
if(i == 3)
一旦有过这样的经历,这种痛苦的错误(在需要进行比较时误用了赋值符号)一般就不会再犯。有些程序员甚至养成了一种习惯,即在比较式中先写常数,如if(3 == i)。这样,如果不小心误用了赋值符号,编译器就会发出“attempted assighnment to literal”(试图向常数赋值)的错误信息。虽然在比较两个变量时,这种技巧起不了作用。但是,积少成多,如果你一直留心这些小技巧,它们迟早会对你有所帮助。