你必须知道的495个C语言问题(涵盖C99标准,好评如潮)
基本信息
- 作者: (美)Steve Summit [作译者介绍]
- 译者: 孙云 朱群英
- 丛书名: 图灵程序设计丛书 C/C++系列
- 出版社:人民邮电出版社
- ISBN:9787115194329
- 上架时间:2009-1-9
- 出版日期:2009 年2月
- 开本:16开
- 页码:262
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > C/Turbo C > C
编辑推荐
全球C语言程序员集体智慧的结晶.
Amazon全五星图书..
权威解答495个最常遇到的C语言问题...
推荐阅读
内容简介回到顶部↑
本书以问答的形式组织内容,讨论了学习或使用c语言的过程中经常遇到的一些问题。书中列出了c用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、c预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。
本书结构清晰,讲解透彻,是各高校相关专业c语言课程很好的教学参考书,也是各层次c程序员的优秀实践指南。
本书结构清晰,讲解透彻,是各高校相关专业c语言课程很好的教学参考书,也是各层次c程序员的优秀实践指南。
作译者回到顶部↑
本书提供作译者介绍
Steve Summit,著名的C语言专家。Usenet C FAQ的创始人和维护者,有近30年的C编程经验。毕业于麻省理工学院。他曾在华盛顿大学教授C语言课程多年。除本书外,他还与人合著了C Unleashed一书。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1章 声明和初始化
基本类型
1.1 我该如何决定使用哪种整数类型?
1.2 为什么不精确定义标准类型的大小?
1.3 因为c语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗?
1.4 新的64位机上的64位类型是什么样的?
指针声明
1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候报错了。
1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样的代码有什么问题?char *p; *p=malloc(10);
声明风格
1.7 怎样声明和定义全局变量和函数最好?
1.8 如何在c中实现不透明(抽象)数据类型?
1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量?
存储类型
1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗?
1.11 extern在函数声明中是什么意思?
1.12 关键字auto到底有什么用途?
类型定义(typedef)
1.13 对于用户定义类型,typedef 和#define有什么区别?
1.14 我似乎不能成功定义一个链表。我试过typedef struct{char *item; nodeptr next;}* nodeptr; 但是编译器报了错误信息。难道在c语言中结构不能包含指向自己的指针吗?
基本类型
1.1 我该如何决定使用哪种整数类型?
1.2 为什么不精确定义标准类型的大小?
1.3 因为c语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗?
1.4 新的64位机上的64位类型是什么样的?
指针声明
1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候报错了。
1.6 我想声明一个指针,并为它分配一些空间,但却不行。这样的代码有什么问题?char *p; *p=malloc(10);
声明风格
1.7 怎样声明和定义全局变量和函数最好?
1.8 如何在c中实现不透明(抽象)数据类型?
1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量?
存储类型
1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗?
1.11 extern在函数声明中是什么意思?
1.12 关键字auto到底有什么用途?
类型定义(typedef)
1.13 对于用户定义类型,typedef 和#define有什么区别?
1.14 我似乎不能成功定义一个链表。我试过typedef struct{char *item; nodeptr next;}* nodeptr; 但是编译器报了错误信息。难道在c语言中结构不能包含指向自己的指针吗?
译者序回到顶部↑
在众多的计算机编程语言中,C语言无疑已经是个“老字辈”了。但自C语言发明以来的数十年时间的光阴流转并没有导致这门语言的式微。实际上,今天在计算机软件构建的诸多领域中,C语言依然挑着大梁。.
如果你是跟译者一样的日常使用C语言的从业者,相信你在C语言的学习和使用过程中,一定会有很多问题。有的问题你可能通过自己的研究很快就找到了答案,而有的疑问则有可能困惑你很久。而且更让人沮丧的是,当你费尽九牛二虎之力,找到问题的答案以后,你可能会在不经意间发现有人在10年前就提出了同样的问题,而且得到了圆满的解答——毕竟C语言的“年龄”已经不小了。这时你一定会想,如果有本书能把这些典型的问题和答案汇集起来该多好啊!那么,这本书正是你想要找的。
本书的原版基于因特网新闻组comp.lang.c的FAQ列表。这个列表在作者Steve Summit的精心组织和管理之下,多年以来已经成了各种C语言问题的经典解答场所。译者第一次阅读这个FAQ以后便觉得茅塞顿开,随之产生了翻译它的愿望。本来是打算拿来作为企业内部培训资料使用的,但翻译完成之后感觉不宜专美,所以译者不顾文笔粗鄙、错漏百出而将中文版放到因特网上,希望能对相关人士有所帮助。..
忽一日,图灵公司的刘江先生跟我联系,了解我们是否愿意将这本书的中文版正式出版出来。欣然允诺后我才发现,要把一份因特网上的文档资料变成白纸黑字的书并不是那么简单。原版的书在内容上大约是发表在网上的FAQ的3倍之多,而且很多问题的阐述也比在线版本翔实、深入。译者几乎对整个稿件又从头翻译和整理了一遍。其间的辛苦,自不必与外人道也。虽然本着精益求精、锲而不舍的态度,无奈能力、精力有限,相信错漏之处在所难免。译者非常欢迎任何相关的批评、建议、指正。在在线版上,译者会维护一个中文版的勘误表。
本书的原版在10多年前出版,但由于10年来C语言本身并没有什么显著的变化,加上原作者对其在线版本又在不断地修正和丰富,所以其生命力依然强大。译者在翻译的过程中,已经将原书的勘误、修正内容引入,同时某些问题还参考了在线版本上较新的答案,而且根据在线版增加了一些问题及解答,在书中用*标注。因此,从这个意义上讲,这是一本新书。...
孙云 朱群英
sunyun.s@gmail.com zhu.qunying@gmail.com
北京 温哥华
2008年9月 2008年9月
如果你是跟译者一样的日常使用C语言的从业者,相信你在C语言的学习和使用过程中,一定会有很多问题。有的问题你可能通过自己的研究很快就找到了答案,而有的疑问则有可能困惑你很久。而且更让人沮丧的是,当你费尽九牛二虎之力,找到问题的答案以后,你可能会在不经意间发现有人在10年前就提出了同样的问题,而且得到了圆满的解答——毕竟C语言的“年龄”已经不小了。这时你一定会想,如果有本书能把这些典型的问题和答案汇集起来该多好啊!那么,这本书正是你想要找的。
本书的原版基于因特网新闻组comp.lang.c的FAQ列表。这个列表在作者Steve Summit的精心组织和管理之下,多年以来已经成了各种C语言问题的经典解答场所。译者第一次阅读这个FAQ以后便觉得茅塞顿开,随之产生了翻译它的愿望。本来是打算拿来作为企业内部培训资料使用的,但翻译完成之后感觉不宜专美,所以译者不顾文笔粗鄙、错漏百出而将中文版放到因特网上,希望能对相关人士有所帮助。..
忽一日,图灵公司的刘江先生跟我联系,了解我们是否愿意将这本书的中文版正式出版出来。欣然允诺后我才发现,要把一份因特网上的文档资料变成白纸黑字的书并不是那么简单。原版的书在内容上大约是发表在网上的FAQ的3倍之多,而且很多问题的阐述也比在线版本翔实、深入。译者几乎对整个稿件又从头翻译和整理了一遍。其间的辛苦,自不必与外人道也。虽然本着精益求精、锲而不舍的态度,无奈能力、精力有限,相信错漏之处在所难免。译者非常欢迎任何相关的批评、建议、指正。在在线版上,译者会维护一个中文版的勘误表。
本书的原版在10多年前出版,但由于10年来C语言本身并没有什么显著的变化,加上原作者对其在线版本又在不断地修正和丰富,所以其生命力依然强大。译者在翻译的过程中,已经将原书的勘误、修正内容引入,同时某些问题还参考了在线版本上较新的答案,而且根据在线版增加了一些问题及解答,在书中用*标注。因此,从这个意义上讲,这是一本新书。...
孙云 朱群英
sunyun.s@gmail.com zhu.qunying@gmail.com
北京 温哥华
2008年9月 2008年9月
前言回到顶部↑
你可能在酒吧或聚会上有这样的经历,有人跟你打赌让你做一些看似简单,但最后却限于人体特质或物理规律而根本无法完成的事情。跟你打赌的人知道,他挑战的人越多,他持续获胜的可能性就越大,因为这些特质或规律虽然十分隐晦,却是相当稳定、可以预测的。.
同样,如果你让很多人来完成一个复杂任务,如学习C语言,他们肯定会遇到同样的困难,提出同样的问题。在最初设计任务的时候这些困难和问题也许不能预见,而答案也恐怕是“后见之明”,但人们依然会不断遇到同样的困难,也会不断提出同样的问题。这些困难和问题并不表明任务就不能完成,只能说明它比较困难,从而变得很有趣。
毫不奇怪,这些问题在因特网尤其是互动讨论的新闻组上不断被问起。将这些常见问题收集起来的想法是顺理成章的,顺着这一想法形成了常见问题(FAQ)列表的传统。FAQ列表未必总能达成最初设想的减少常见问题发生率的目的,但如果问题是一贯的,那它们被经常问到并纳入FAQ列表的事实说明,它们也许正是你或本书的其他读者要问的问题。
关于本书
多数(关于C语言或其他任何主题的)书都是从作者的角度写成的。它们是用一种作者自己明白的方式来讨论作者认为你应该知道的主题。如果那种方式不适合你(在某种程度上,也不可能适合,因为作者预先已经知道那些内容,而你却全然不知),你很有可能被弄得满头雾水。
而这本书却不一样,它由400多个问题组织而成,所有问题都是人们在学习C语言编程的过程中提出的真实问题。本书不是针对作者认为重要的议题,而是针对真正的读者认为重要的议题,讨论他们提出的问题。如果你在学习或使用C语言,而你遇到的问题在别的书里都找不到答案,那么你很有可能会在这里找到答案。
本书不能保证解答你在C语言编程中遇到的所有问题,因为在编程实践中产生的很多问题都跟你的问题领域有关,而本书只涵盖了C语言本身。正如它不能涵盖每个人试图用C语言解决的每个问题的每个方面,本书也不能涵盖每个人用C语言编程时用的每个操作系统的方方面面或每个人希望用C语言实现的每个算法。具体的问题、具体的操作系统和通用的算法都有专门的书和其他材料进行讨论。不过,某些跟操作系统和算法相关的问题十分常见,因此第19章和第20章对其中一些问题提供了简单的、介绍性的答案,但不要期待它们很完备。
本书中的问题是人们在读完一本C语言入门书或上了一门C语言课程之后常常会提到的。因此本书不是一点点教你学C语言,也不会讨论任何C语言教材都会讨论的基础问题。而且,本书的答案在极大程度上都应该是绝对正确,不会传播任何误解的。因此有些答案初看起来显得有些过于详细,它们要向你提供完整的图景,而不能过于简化而略去了重要的细节。(毕竟,很多这类细节正是本书的问答中提到的诸多错误观点的根源。)在这些详尽的答案中,必要的地方会有捷径和简化处理,而在术语表中你会找到术语的精确定义,帮你准确解释很多问题。当然,这些捷径和简化处理都是安全的,它们不会导致以后的误解,而如果你需要完整的版本,你总是可以找到更详尽的解释或者查到相关的参考文献。
正如我们会在第3章和第11章中看到的那样,C语言的标准定义并没有规定每个写成的C程序的行为。有些程序陷入了各种灰色地带:它们可能在某些系统上能运行,而且严格说来也不非法,但却不能确保在各处都能运行。本书介绍的是可移植的C编程,因此在答案中建议,只要可能就不用不可移植的方法。
本书所基于的在线FAQ列表是一种对话的方式,当人们看不懂的时候,就会直言不讳地提出来。这样的及时反馈非常有利于改善解答的形式。尽管出成书以后就不能这么动态了,但这样的对话方式依然适用:欢迎你的意见、批评和建议。如果你能访问因特网,可以发送意见到scs@eskimo.com,或者寄信让出版社转交。本书的堪误表可以在因特网上获得,并在网上进行维护,具体参见问题20.47中的信息。
问题格式
本书的内容包含一系列的问题及答案。很多答案中还列举了参考书目;有些还有脚注,如果你觉得它们太吹毛求疵,可以略过。
等宽字体用来表示C语法(函数和变量名、关键字等),也用来表示一些操作系统命令(如cc等)。偶尔出现的tty(4)这样的符号表示UNIX Programmer’s Manual第4章的“tty”一节。
代码示例..
这是本关于C语言的书,因此必要处给出了许多C程序段。这些例子主要用来清楚地展示。它们不一定总是用最高效的方式写成的,让它们更“快”往往会导致更不清楚。(关于代码效率的信息参见问题20.14。)它们通常都是用现代的ANSI风格的语法写成。如果你还在使用“经典的(classic)”编译器,参见问题11.31关于转换的提示。
作者和出版社欢迎你在自己的程序中使用和修改这些代码片段,当然如果你能提及作者,我们将十分感激。(某些片段来自其他来源,也采用同样的策略。如果你使用这些代码,请感谢对应的贡献者。)较大的例子的源码可以通过匿名ftp从aw.com的cseng/authors/summit/cfaq下载(参见问题18.12)。
为了强调某些要点,我不得不举一些不能那样做的反例子。在答案中,这样的代码片段都用/*WRONG*/这样明确的注释标示出来了,提示你不要模仿。(问题中的代码片段通常没有类似的标示,但从问题本身的提法上应该很容易看出代码片段有问题,因为这些问题通常是“为什么这样做不行”。)
组织
如前所述,本书的问题来自人们在实际的工作或学习中提出的真实问题,这些问题有时不能很好地归类。很多问题涉及多个主题:看似内存分配的问题实际原因却是声明错误。(有些问题在两章中都会出现,以便它们更容易找到。)无论如何,这不是一本必须从头读到尾的书:使用目录、索引和问题之间的交叉索引来找你感兴趣的主题。(如果你有空闲时间从头读到尾,可能会遇到你没有想到过的问题的答案。)
通常,在开始写代码之前要先声明数据结构,因此第1章从声明和初始化开始谈起。C语言的结构、联合和枚举类型足够复杂,值得为它们单独写一章。第2章讨论了它们的声明和使用方法。
同样,如果你让很多人来完成一个复杂任务,如学习C语言,他们肯定会遇到同样的困难,提出同样的问题。在最初设计任务的时候这些困难和问题也许不能预见,而答案也恐怕是“后见之明”,但人们依然会不断遇到同样的困难,也会不断提出同样的问题。这些困难和问题并不表明任务就不能完成,只能说明它比较困难,从而变得很有趣。
毫不奇怪,这些问题在因特网尤其是互动讨论的新闻组上不断被问起。将这些常见问题收集起来的想法是顺理成章的,顺着这一想法形成了常见问题(FAQ)列表的传统。FAQ列表未必总能达成最初设想的减少常见问题发生率的目的,但如果问题是一贯的,那它们被经常问到并纳入FAQ列表的事实说明,它们也许正是你或本书的其他读者要问的问题。
关于本书
多数(关于C语言或其他任何主题的)书都是从作者的角度写成的。它们是用一种作者自己明白的方式来讨论作者认为你应该知道的主题。如果那种方式不适合你(在某种程度上,也不可能适合,因为作者预先已经知道那些内容,而你却全然不知),你很有可能被弄得满头雾水。
而这本书却不一样,它由400多个问题组织而成,所有问题都是人们在学习C语言编程的过程中提出的真实问题。本书不是针对作者认为重要的议题,而是针对真正的读者认为重要的议题,讨论他们提出的问题。如果你在学习或使用C语言,而你遇到的问题在别的书里都找不到答案,那么你很有可能会在这里找到答案。
本书不能保证解答你在C语言编程中遇到的所有问题,因为在编程实践中产生的很多问题都跟你的问题领域有关,而本书只涵盖了C语言本身。正如它不能涵盖每个人试图用C语言解决的每个问题的每个方面,本书也不能涵盖每个人用C语言编程时用的每个操作系统的方方面面或每个人希望用C语言实现的每个算法。具体的问题、具体的操作系统和通用的算法都有专门的书和其他材料进行讨论。不过,某些跟操作系统和算法相关的问题十分常见,因此第19章和第20章对其中一些问题提供了简单的、介绍性的答案,但不要期待它们很完备。
本书中的问题是人们在读完一本C语言入门书或上了一门C语言课程之后常常会提到的。因此本书不是一点点教你学C语言,也不会讨论任何C语言教材都会讨论的基础问题。而且,本书的答案在极大程度上都应该是绝对正确,不会传播任何误解的。因此有些答案初看起来显得有些过于详细,它们要向你提供完整的图景,而不能过于简化而略去了重要的细节。(毕竟,很多这类细节正是本书的问答中提到的诸多错误观点的根源。)在这些详尽的答案中,必要的地方会有捷径和简化处理,而在术语表中你会找到术语的精确定义,帮你准确解释很多问题。当然,这些捷径和简化处理都是安全的,它们不会导致以后的误解,而如果你需要完整的版本,你总是可以找到更详尽的解释或者查到相关的参考文献。
正如我们会在第3章和第11章中看到的那样,C语言的标准定义并没有规定每个写成的C程序的行为。有些程序陷入了各种灰色地带:它们可能在某些系统上能运行,而且严格说来也不非法,但却不能确保在各处都能运行。本书介绍的是可移植的C编程,因此在答案中建议,只要可能就不用不可移植的方法。
本书所基于的在线FAQ列表是一种对话的方式,当人们看不懂的时候,就会直言不讳地提出来。这样的及时反馈非常有利于改善解答的形式。尽管出成书以后就不能这么动态了,但这样的对话方式依然适用:欢迎你的意见、批评和建议。如果你能访问因特网,可以发送意见到scs@eskimo.com,或者寄信让出版社转交。本书的堪误表可以在因特网上获得,并在网上进行维护,具体参见问题20.47中的信息。
问题格式
本书的内容包含一系列的问题及答案。很多答案中还列举了参考书目;有些还有脚注,如果你觉得它们太吹毛求疵,可以略过。
等宽字体用来表示C语法(函数和变量名、关键字等),也用来表示一些操作系统命令(如cc等)。偶尔出现的tty(4)这样的符号表示UNIX Programmer’s Manual第4章的“tty”一节。
代码示例..
这是本关于C语言的书,因此必要处给出了许多C程序段。这些例子主要用来清楚地展示。它们不一定总是用最高效的方式写成的,让它们更“快”往往会导致更不清楚。(关于代码效率的信息参见问题20.14。)它们通常都是用现代的ANSI风格的语法写成。如果你还在使用“经典的(classic)”编译器,参见问题11.31关于转换的提示。
作者和出版社欢迎你在自己的程序中使用和修改这些代码片段,当然如果你能提及作者,我们将十分感激。(某些片段来自其他来源,也采用同样的策略。如果你使用这些代码,请感谢对应的贡献者。)较大的例子的源码可以通过匿名ftp从aw.com的cseng/authors/summit/cfaq下载(参见问题18.12)。
为了强调某些要点,我不得不举一些不能那样做的反例子。在答案中,这样的代码片段都用/*WRONG*/这样明确的注释标示出来了,提示你不要模仿。(问题中的代码片段通常没有类似的标示,但从问题本身的提法上应该很容易看出代码片段有问题,因为这些问题通常是“为什么这样做不行”。)
组织
如前所述,本书的问题来自人们在实际的工作或学习中提出的真实问题,这些问题有时不能很好地归类。很多问题涉及多个主题:看似内存分配的问题实际原因却是声明错误。(有些问题在两章中都会出现,以便它们更容易找到。)无论如何,这不是一本必须从头读到尾的书:使用目录、索引和问题之间的交叉索引来找你感兴趣的主题。(如果你有空闲时间从头读到尾,可能会遇到你没有想到过的问题的答案。)
通常,在开始写代码之前要先声明数据结构,因此第1章从声明和初始化开始谈起。C语言的结构、联合和枚举类型足够复杂,值得为它们单独写一章。第2章讨论了它们的声明和使用方法。
序言回到顶部↑
1979年的某段时间,我听到很多人在谈论C这个当时还挺新的语言和那本刚刚推出的书。我买了一本Brian Kernighan和Denis Ritchie写的The C Programming Language(也称K&R),但它在我的书架上空等了好一阵子,因为当时我并不急着需要它(况且我那时候还是一个余暇无多的大一新生)。后来证明这本书买得很幸运,因为当我最后拿起它以后,就再也没有放下了:从那以后,我就一直在用C语言编程。.
1983年我结识了新闻组net.lang.c,这(以及它的后继者comp.lang.c)是一个绝佳的地方,你可以学习C语言的方方面面,发现别人关于C语言的各种疑问,认识到你可能根本还没有掌握关于C语言的一切。C语言尽管表面上很简单,但也还有一些并不显而易见的方面,有些问题不断有人问起。本书根据我从1990年5月开始在comp.lang.c上发布的常见问题(FAQ)列表收集了这样的一些问题,并提供了答案。
然而我得声明,这本书并不是对C语言的批评或诽谤。用户在使用时遇到困难,很容易迁怒于语言(或其他任何工具)或者要求正确设计的工具“应该”防止用户的误用。因此看到书中提及的各种误用以后,很容易将这样的书看作试图显示C语言的先天不足的长篇控诉。这实在是远悖我的本意。
如果我不认为C语言是一门伟大的语言,或者没有在这种语言的编程中获得那么多的乐趣,那我永远也学不到足够的关于C语言的知识来写出本书,而且也不会试图写出本书来让别人更爱用C语言。我很喜欢C语言,我教C的课并花时间参与网上讨论的原因之一,就是希望发现这门语言(或者说编程本身)在哪些方面比较难学,让人不易高效地编程。本书展示了我认识到的部分内容,这些问题毫无疑问就是人们遇到麻烦最多的,而答案则经过多年的反复修正,就是为了消除人们的麻烦。
如果这些答案中有任何错误,那么读者一定会遇到麻烦。尽管审稿人和我都尽力去除所有的错误,但从一部手稿中根除最后一个错误,就跟从程序中去掉最后一个bug一样困难。通过出版社转交或发往我的E-mail地址的任何修正和建议我都感激不尽。同时我也对任何错误的第一个发现者按惯例提供$1.00的报酬。如果你能够访问因特网,你可以在问题20.47提到的ftp和http网址中找到一份勘误表(和错误发现者的积分表)。
希望我已经澄清,这本书并不是对C语言的批评,也不是对我学习过的C语言的书或其作者的批评。从K&R中我不仅学到了C语言,还学会了编程。在试图用自己的贡献来丰富C语言的文献的时候,我唯一遗憾的就是本书没有做到K&R第二版发现的妙处,即“C不是一门复杂的语言,并不值得为它写本厚书”。我希望那些深深地欣赏C语言(及K&R)的简洁和精确的人,看到本书反反复复讲述某些东西,或用3种稍稍不同的方式讲述一个问题的时候不要生气。
尽管封面上只印着我一个人的名字,但这本书的背后却有许许多多的人,简直不知道该从哪里开始感谢。从某种意义上讲,comp.lang.c的每个读者(现在约有320 000人)都做出了贡献:这本书背后的FAQ列表是为comp.lang.c写的,因而本书也保留了comp.lang.c良好的讨论氛围。
我希望这本书也保留了我开始阅读net.lang.c时所学习的正确C语言编程的思想。因此,我要首先感谢我所知的一贯清楚解释这种思想的人:Doug Gwyn、Guy Harris、Karl Heuer、Henry Spencer和Chris Torek。这些绅士们多年来不断耐心、慷慨而睿智地解答各种无穷尽的问题。是我出头写下这些常见问题的,但不要以为是我给出了这些答案。我曾经是个学生(我想正是Guy解答了我提出的问题,现为本书问题5.10),我对走在前面的大师们感激不尽。这本书与其说是我的,不如说是他们的。但对书中的不足和错误我愿一力承担。
在线FAQ在变成本书的过程中增长了3倍,它的增长一度太快也变得有些笨拙了。Mark Brader、Vinit Carpenter、Stephen Clamage、Jutta Degener、Doug Gwyn、Karl Keuer、Joseph Kent和George Leach阅读了部分或全部的手稿,帮我对这一过程施加了一些控制,感谢他们大量的仔细建议和修正。他们的努力都源自一个共同的愿望,期待在编程社区中提高对C语言的整体理解。感谢他们的贡献。
这些审稿人中有3个长期以来也是在线FAQ的贡献者。感谢Jutta Degener和Karl Heuer多年来的帮助,尤其感谢Mark Brader,从5年前我第一次在comp.lang.c上发布FAQ以来,他就一直给予我批评。我不知道他哪里来的毅力提出那么多的建议和修正,其中部分还遭到了我持久顽固的拒绝,即使(正如我最后意识到的)它们实际的确是改进。你可以感谢Mark为本书提供的很多解释的表述形式,而弄糟的部分就责怪我吧。
还要感谢:Susan Cyr设计的封面;Bob Dinse和Eskimo North提供的网络环境,这对这样的项目至关重要;Bob Holland提供的计算机,这本书的大部分内容都是用它写成的;Pete Keleher提供的Alpha文本编辑器;华盛顿大学数学研究和工程图书馆提供的图书查询便利;华盛顿大学海洋学系借给我的磁带驱动器,用来访问我尘封的新闻组旧帖。
感谢Tanmoy Bhattacharya提供的问题11.11中的例子,感谢Arjan Kenter提供的问题13.7中的代码,感谢Tomohiko Sakamoto提供的问题20.37中的代码,感谢Roger Miller提供的问题11.38中的一行文字。..
感谢世界各地的人们通过提供建议、修正、建设性的批评或其他支持对FAQ的贡献:Jamshid Afshar, Lauri Alanko, Michael B. Allen, David Anderson, Jens Andreasen, Tanner Andrews, Sudheer Apte, Joseph Arceneaux, Randall Atkinson, Kaleb Axon, Daniel Barker, Rick Beem, Peter Bennett, Mathias Bergqvist, Wayne Berke, DanBernstein, Tanmoy Bhattacharya, John Bickers, Kevin Black, Gary Blaine, Yuan Bo,Mark J. Bobak, Anthony Borla, Dave Boutcher, Alan Bowler, breadbox@muppetlabs.com,Michael Bresnahan, Walter Briscoe, Vincent Broman, Robert T. Brown, Stan Brown, John R. Buchan, Joe Buehler, Kimberley Burchett, Gordon Burditt, Scott Burkett, Eberhard Burr, Burkhard Burow, Conor P. Cahill, D’Arcy J.M. Cain, Christopher Calabrese, Ian Cargill, Vinit Carpenter, Paul Carter, Mike Chambers, Billy Chambless, C. Ron Charlton, Franklin Chen, Jonathan Chen, Raymond Chen, Richard Cheung, Avinash Chopde,Steve Clamage, Ken Corbin, Dann Corbit, Ian Cottam, Russ Cox, Jonathan Coxhead,Lee Crawford, Nick Cropper, Steve Dahmer, Jim Dalsimer, Andrew Daviel, James Davies,John E. Davis, Ken Delong, Norm Diamond, Jamie Dickson, Bob Dinse, dlynes@plenarysoftware, Colin Dooley, Jeff Dunlop, Ray Dunn, Stephen M. Dunn, Andrew Dunstan,Michael J. Eager, Scott Ehrlich, Arno Eigenwillig, Yoav Eilat, Dave Eisen, Joe English,Bjorn Engsig, David Evans, Andreas Fassl, Clive D.W. Feather, Dominic Feeley, Simao Ferraz, Pete Filandr, Bill Finke Jr., Chris Flatters, Rod Flores, Alexander Forst, Steve Fosdick, Jeff Francis, Ken Fuchs, Tom Gambill, Dave Gillespie, Samuel Goldstein, Willis Gooch, Tim Goodwin, Alasdair Grant, W. Wesley Groleau, Ron Guilmette, Craig Gullixson, Doug Gwyn, Michael Hafner, Zhonglin Han, Darrel Hankerson, Tony Hansen, Douglas Wilhelm Harder, Elliotte Rusty Harold, Joe Harrington, Guy Harris, John Hascall, Adrian Havill, Richard Heatheld, Des Herriott, Ger Hobbelt, Sam Hobbs, JoelRay Holveck, Jos Horsmeier, Syed Zaeem Hosain, Blair Houghton, Phil Howard, Peter Hryczanek, James C. Hu, Chin Huang, Jason Hughes, David Hurt, Einar Indridason,Vladimir Ivanovic, Jon Jagger, Ke Jin, Kirk Johnson, David Jones, Larry Jones, Morris M. Keesan, Arjan Kenter, Bhaktha Keshavachar, James Kew, Bill Kilgore, Darrell Kindred, Lawrence Kirby, Kin-ichi Kitano, Peter Klausler, John Kleinjans, Andrew Koenig, Thomas Koenig, Adam Kolawa, Jukka Korpela, Przemyslaw Kowalczyk, Ajoy Krishnan T, Anders Kristensen, Jon Krom, Markus Kuhn, Deepak Kulkarni, Yohan Kun, B. Kurtz, Kaz Kylheku, Oliver Laumann, John Lauro, Felix Lee, Mike Lee, Timothy J. Lee, Tony Lee, Marty Leisner, Eric Lemings, Dave Lewis, Don Libes, Brian Liedtke, Philip Lijnzaad, James D. Lin, Keith Lindsay, Yen-Wei Liu, Paul Long, Patrick J. LoPresti, Christopher Lott, Tim Love, Paul Lutus, Mike McCarty, Tim McDaniel, Michael MacFaden, Allen Mcintosh, J. Scott McKellar, Kevin McMahon, Stuart MacMartin, John R. MacMillan, Robert S. Maier, Andrew Main, Bob Makowski, Evan Manning, Barry Margolin, George Marsaglia, George Matas, Brad Mears, Wayne Mery, De Mickey, Rich Miller, Roger Miller,Bill Mitchell, Mark Moraes, Darren Morby, Bernhard Muenzer, David Murphy, Walter Murray, Ralf Muschall, Ken Nakata, Todd Nathan, Taed Nelson, Pedro Zorzenon Neto,Daniel Nielsen, Landon Curt Noll, Tim Norman, Paul Nulsen, David O’Brien, Richard A. O’Keefe, Adam Kolawa, Keith Edward O’hara, James Ojaste, Max Okumoto, Hans Olsson, Thomas Otahal, Lloyd Parkes, Bob Peck, Harry Pehkonen, Andrew Phillips, Christopher Phillips, Francois Pinard, Nick Piteld, Wayne Pollock, Polver@aol.com, Dan Pop, Don Porges, Claudio Potenza, Lutz Prechelt, Lynn Pye, Ed Price, Kevin D. Quitt, Pat Rankin, Arjun Ray, Eric S. Raymond, Christoph Regli, Peter W. Richards, James Robinson, Greg Roelofs, Eric Roode, Manfred Rosenboom, J.M. Rosenstock, Rick Rowe, Michael Rubenstein, Erkki Ruohtula, John C. Rush, John Rushford, Kadda Sahnine, Tomohiko Sakamoto, Matthew Saltzman, Rich Salz, Chip Salzenberg, Matthew Sams, Paul Sand, David W. Sanderson, Frank Sandy, Christopher Sawtell, Jonas Schlein, Paul Schlyter, Doug Schmidt, Rene Schmit, Russell Schulz, Dean Schulze, Jens Schweikhardt, Chris Sears, Peter Seebach, Gisbert W. Selke, Patricia Shanahan, Girija Shanker, Clinton Sheppard, Aaron Sherman, Raymond Shwake, Nathan Sidwell, Thomas Siegel, Peter da Silva, Andrew Simmons, Joshua Simons, Ross Smith, Thad Smith, Henri Socha, Leslie J. Somos, Eric Sosman, Henry Spencer, David Spuler, Frederic Stark, James Stern,Zalman Stern, Michael Sternberg, Geoff Stevens, Alan Stokes, Bob Stout, Dan Stubbs, Tristan Styles, Richard Sullivan, Steve Sullivan, Melanie Summit, Erik Talvola, Christopher Taylor, Dave Taylor, Clarke Thatcher, Wayne Throop, Chris Torek, Steve Traugott, Brian Trial, Nikos Triantallis, Ilya Tsindlekht, Andrew Tucker, Goran Uddeborg, Rodrigo Vanegas, Jim Van Zandt, Momchil Velikov, Wietse Venema, Tom Verhoeff, Ed Vielmetti, Larry Virden, Chris Volpe, Mark Warren, Alan Watson, Kurt Watzka, Larry Weiss, Martin Weitzel, Howard West, Tom White, Freek Wiedijk, Stephan Wilms, Tim Wilson, Dik T. Winter, Lars Wirzenius, Dave Wolverton, Mitch Wright, Conway Yee, James Youngman, Ozan S. Yigit和Zhuo Zang。 我试图记录下我采纳建议的每一个人,但我担心可能还是遗漏了一些,对那些名字本该出现在这里而没有出现的人,我诚恳地致以道歉。
最后,我要感谢Addison-Wesley的编辑Debbie Lafferty,她有一天发邮件问我是否有兴趣写这本书。我有兴趣,你现在手里拿的就是它。我希望这本书能让你跟我一样觉得C语言编程令人快乐。...
Steve Summit
scs@eskimo.com
1995年7月于华盛顿州西雅图市
1983年我结识了新闻组net.lang.c,这(以及它的后继者comp.lang.c)是一个绝佳的地方,你可以学习C语言的方方面面,发现别人关于C语言的各种疑问,认识到你可能根本还没有掌握关于C语言的一切。C语言尽管表面上很简单,但也还有一些并不显而易见的方面,有些问题不断有人问起。本书根据我从1990年5月开始在comp.lang.c上发布的常见问题(FAQ)列表收集了这样的一些问题,并提供了答案。
然而我得声明,这本书并不是对C语言的批评或诽谤。用户在使用时遇到困难,很容易迁怒于语言(或其他任何工具)或者要求正确设计的工具“应该”防止用户的误用。因此看到书中提及的各种误用以后,很容易将这样的书看作试图显示C语言的先天不足的长篇控诉。这实在是远悖我的本意。
如果我不认为C语言是一门伟大的语言,或者没有在这种语言的编程中获得那么多的乐趣,那我永远也学不到足够的关于C语言的知识来写出本书,而且也不会试图写出本书来让别人更爱用C语言。我很喜欢C语言,我教C的课并花时间参与网上讨论的原因之一,就是希望发现这门语言(或者说编程本身)在哪些方面比较难学,让人不易高效地编程。本书展示了我认识到的部分内容,这些问题毫无疑问就是人们遇到麻烦最多的,而答案则经过多年的反复修正,就是为了消除人们的麻烦。
如果这些答案中有任何错误,那么读者一定会遇到麻烦。尽管审稿人和我都尽力去除所有的错误,但从一部手稿中根除最后一个错误,就跟从程序中去掉最后一个bug一样困难。通过出版社转交或发往我的E-mail地址的任何修正和建议我都感激不尽。同时我也对任何错误的第一个发现者按惯例提供$1.00的报酬。如果你能够访问因特网,你可以在问题20.47提到的ftp和http网址中找到一份勘误表(和错误发现者的积分表)。
希望我已经澄清,这本书并不是对C语言的批评,也不是对我学习过的C语言的书或其作者的批评。从K&R中我不仅学到了C语言,还学会了编程。在试图用自己的贡献来丰富C语言的文献的时候,我唯一遗憾的就是本书没有做到K&R第二版发现的妙处,即“C不是一门复杂的语言,并不值得为它写本厚书”。我希望那些深深地欣赏C语言(及K&R)的简洁和精确的人,看到本书反反复复讲述某些东西,或用3种稍稍不同的方式讲述一个问题的时候不要生气。
尽管封面上只印着我一个人的名字,但这本书的背后却有许许多多的人,简直不知道该从哪里开始感谢。从某种意义上讲,comp.lang.c的每个读者(现在约有320 000人)都做出了贡献:这本书背后的FAQ列表是为comp.lang.c写的,因而本书也保留了comp.lang.c良好的讨论氛围。
我希望这本书也保留了我开始阅读net.lang.c时所学习的正确C语言编程的思想。因此,我要首先感谢我所知的一贯清楚解释这种思想的人:Doug Gwyn、Guy Harris、Karl Heuer、Henry Spencer和Chris Torek。这些绅士们多年来不断耐心、慷慨而睿智地解答各种无穷尽的问题。是我出头写下这些常见问题的,但不要以为是我给出了这些答案。我曾经是个学生(我想正是Guy解答了我提出的问题,现为本书问题5.10),我对走在前面的大师们感激不尽。这本书与其说是我的,不如说是他们的。但对书中的不足和错误我愿一力承担。
在线FAQ在变成本书的过程中增长了3倍,它的增长一度太快也变得有些笨拙了。Mark Brader、Vinit Carpenter、Stephen Clamage、Jutta Degener、Doug Gwyn、Karl Keuer、Joseph Kent和George Leach阅读了部分或全部的手稿,帮我对这一过程施加了一些控制,感谢他们大量的仔细建议和修正。他们的努力都源自一个共同的愿望,期待在编程社区中提高对C语言的整体理解。感谢他们的贡献。
这些审稿人中有3个长期以来也是在线FAQ的贡献者。感谢Jutta Degener和Karl Heuer多年来的帮助,尤其感谢Mark Brader,从5年前我第一次在comp.lang.c上发布FAQ以来,他就一直给予我批评。我不知道他哪里来的毅力提出那么多的建议和修正,其中部分还遭到了我持久顽固的拒绝,即使(正如我最后意识到的)它们实际的确是改进。你可以感谢Mark为本书提供的很多解释的表述形式,而弄糟的部分就责怪我吧。
还要感谢:Susan Cyr设计的封面;Bob Dinse和Eskimo North提供的网络环境,这对这样的项目至关重要;Bob Holland提供的计算机,这本书的大部分内容都是用它写成的;Pete Keleher提供的Alpha文本编辑器;华盛顿大学数学研究和工程图书馆提供的图书查询便利;华盛顿大学海洋学系借给我的磁带驱动器,用来访问我尘封的新闻组旧帖。
感谢Tanmoy Bhattacharya提供的问题11.11中的例子,感谢Arjan Kenter提供的问题13.7中的代码,感谢Tomohiko Sakamoto提供的问题20.37中的代码,感谢Roger Miller提供的问题11.38中的一行文字。..
感谢世界各地的人们通过提供建议、修正、建设性的批评或其他支持对FAQ的贡献:Jamshid Afshar, Lauri Alanko, Michael B. Allen, David Anderson, Jens Andreasen, Tanner Andrews, Sudheer Apte, Joseph Arceneaux, Randall Atkinson, Kaleb Axon, Daniel Barker, Rick Beem, Peter Bennett, Mathias Bergqvist, Wayne Berke, DanBernstein, Tanmoy Bhattacharya, John Bickers, Kevin Black, Gary Blaine, Yuan Bo,Mark J. Bobak, Anthony Borla, Dave Boutcher, Alan Bowler, breadbox@muppetlabs.com,Michael Bresnahan, Walter Briscoe, Vincent Broman, Robert T. Brown, Stan Brown, John R. Buchan, Joe Buehler, Kimberley Burchett, Gordon Burditt, Scott Burkett, Eberhard Burr, Burkhard Burow, Conor P. Cahill, D’Arcy J.M. Cain, Christopher Calabrese, Ian Cargill, Vinit Carpenter, Paul Carter, Mike Chambers, Billy Chambless, C. Ron Charlton, Franklin Chen, Jonathan Chen, Raymond Chen, Richard Cheung, Avinash Chopde,Steve Clamage, Ken Corbin, Dann Corbit, Ian Cottam, Russ Cox, Jonathan Coxhead,Lee Crawford, Nick Cropper, Steve Dahmer, Jim Dalsimer, Andrew Daviel, James Davies,John E. Davis, Ken Delong, Norm Diamond, Jamie Dickson, Bob Dinse, dlynes@plenarysoftware, Colin Dooley, Jeff Dunlop, Ray Dunn, Stephen M. Dunn, Andrew Dunstan,Michael J. Eager, Scott Ehrlich, Arno Eigenwillig, Yoav Eilat, Dave Eisen, Joe English,Bjorn Engsig, David Evans, Andreas Fassl, Clive D.W. Feather, Dominic Feeley, Simao Ferraz, Pete Filandr, Bill Finke Jr., Chris Flatters, Rod Flores, Alexander Forst, Steve Fosdick, Jeff Francis, Ken Fuchs, Tom Gambill, Dave Gillespie, Samuel Goldstein, Willis Gooch, Tim Goodwin, Alasdair Grant, W. Wesley Groleau, Ron Guilmette, Craig Gullixson, Doug Gwyn, Michael Hafner, Zhonglin Han, Darrel Hankerson, Tony Hansen, Douglas Wilhelm Harder, Elliotte Rusty Harold, Joe Harrington, Guy Harris, John Hascall, Adrian Havill, Richard Heatheld, Des Herriott, Ger Hobbelt, Sam Hobbs, JoelRay Holveck, Jos Horsmeier, Syed Zaeem Hosain, Blair Houghton, Phil Howard, Peter Hryczanek, James C. Hu, Chin Huang, Jason Hughes, David Hurt, Einar Indridason,Vladimir Ivanovic, Jon Jagger, Ke Jin, Kirk Johnson, David Jones, Larry Jones, Morris M. Keesan, Arjan Kenter, Bhaktha Keshavachar, James Kew, Bill Kilgore, Darrell Kindred, Lawrence Kirby, Kin-ichi Kitano, Peter Klausler, John Kleinjans, Andrew Koenig, Thomas Koenig, Adam Kolawa, Jukka Korpela, Przemyslaw Kowalczyk, Ajoy Krishnan T, Anders Kristensen, Jon Krom, Markus Kuhn, Deepak Kulkarni, Yohan Kun, B. Kurtz, Kaz Kylheku, Oliver Laumann, John Lauro, Felix Lee, Mike Lee, Timothy J. Lee, Tony Lee, Marty Leisner, Eric Lemings, Dave Lewis, Don Libes, Brian Liedtke, Philip Lijnzaad, James D. Lin, Keith Lindsay, Yen-Wei Liu, Paul Long, Patrick J. LoPresti, Christopher Lott, Tim Love, Paul Lutus, Mike McCarty, Tim McDaniel, Michael MacFaden, Allen Mcintosh, J. Scott McKellar, Kevin McMahon, Stuart MacMartin, John R. MacMillan, Robert S. Maier, Andrew Main, Bob Makowski, Evan Manning, Barry Margolin, George Marsaglia, George Matas, Brad Mears, Wayne Mery, De Mickey, Rich Miller, Roger Miller,Bill Mitchell, Mark Moraes, Darren Morby, Bernhard Muenzer, David Murphy, Walter Murray, Ralf Muschall, Ken Nakata, Todd Nathan, Taed Nelson, Pedro Zorzenon Neto,Daniel Nielsen, Landon Curt Noll, Tim Norman, Paul Nulsen, David O’Brien, Richard A. O’Keefe, Adam Kolawa, Keith Edward O’hara, James Ojaste, Max Okumoto, Hans Olsson, Thomas Otahal, Lloyd Parkes, Bob Peck, Harry Pehkonen, Andrew Phillips, Christopher Phillips, Francois Pinard, Nick Piteld, Wayne Pollock, Polver@aol.com, Dan Pop, Don Porges, Claudio Potenza, Lutz Prechelt, Lynn Pye, Ed Price, Kevin D. Quitt, Pat Rankin, Arjun Ray, Eric S. Raymond, Christoph Regli, Peter W. Richards, James Robinson, Greg Roelofs, Eric Roode, Manfred Rosenboom, J.M. Rosenstock, Rick Rowe, Michael Rubenstein, Erkki Ruohtula, John C. Rush, John Rushford, Kadda Sahnine, Tomohiko Sakamoto, Matthew Saltzman, Rich Salz, Chip Salzenberg, Matthew Sams, Paul Sand, David W. Sanderson, Frank Sandy, Christopher Sawtell, Jonas Schlein, Paul Schlyter, Doug Schmidt, Rene Schmit, Russell Schulz, Dean Schulze, Jens Schweikhardt, Chris Sears, Peter Seebach, Gisbert W. Selke, Patricia Shanahan, Girija Shanker, Clinton Sheppard, Aaron Sherman, Raymond Shwake, Nathan Sidwell, Thomas Siegel, Peter da Silva, Andrew Simmons, Joshua Simons, Ross Smith, Thad Smith, Henri Socha, Leslie J. Somos, Eric Sosman, Henry Spencer, David Spuler, Frederic Stark, James Stern,Zalman Stern, Michael Sternberg, Geoff Stevens, Alan Stokes, Bob Stout, Dan Stubbs, Tristan Styles, Richard Sullivan, Steve Sullivan, Melanie Summit, Erik Talvola, Christopher Taylor, Dave Taylor, Clarke Thatcher, Wayne Throop, Chris Torek, Steve Traugott, Brian Trial, Nikos Triantallis, Ilya Tsindlekht, Andrew Tucker, Goran Uddeborg, Rodrigo Vanegas, Jim Van Zandt, Momchil Velikov, Wietse Venema, Tom Verhoeff, Ed Vielmetti, Larry Virden, Chris Volpe, Mark Warren, Alan Watson, Kurt Watzka, Larry Weiss, Martin Weitzel, Howard West, Tom White, Freek Wiedijk, Stephan Wilms, Tim Wilson, Dik T. Winter, Lars Wirzenius, Dave Wolverton, Mitch Wright, Conway Yee, James Youngman, Ozan S. Yigit和Zhuo Zang。 我试图记录下我采纳建议的每一个人,但我担心可能还是遗漏了一些,对那些名字本该出现在这里而没有出现的人,我诚恳地致以道歉。
最后,我要感谢Addison-Wesley的编辑Debbie Lafferty,她有一天发邮件问我是否有兴趣写这本书。我有兴趣,你现在手里拿的就是它。我希望这本书能让你跟我一样觉得C语言编程令人快乐。...
Steve Summit
scs@eskimo.com
1995年7月于华盛顿州西雅图市
媒体评论回到顶部↑
“本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之一。我向所有C语言程序员推荐本书。”.
——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席
“本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!”...
——Yechiel M.Kimchi,以色列理工学院
——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席
“本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!”...
——Yechiel M.Kimchi,以色列理工学院
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)
· 图灵公司详细书目








点击看大图






加载中...

