315,关于《C程序设计伴侣》一书致人民邮电出版社的公开信

邮电社,不出版文盲写的书行吗?

目录

邮电社,不出版文盲写的书行吗?… 1

抄袭拼凑… 2

欺骗读者… 2

硬伤累累,错谬概念层出不穷… 3

关于关键字… 3

关于标识符… 3

关于常量与变量… 3

关于运算符… 3

关于数据类型… 4

关于表达式… 5

关于声明… 6

关于语句… 6

关于数组… 8

关于初始化… 8

关于函数… 9

关于外部变量与局部变量… 10

关于作用域与生存期… 10

关于字符串… 12

关于库函数… 12

关于指针… 14

关于main() 15

关于输入输出… 15

关于结构体、共用体、枚举… 16

关于链表… 16

关于typedef 16

关于文件… 16

关于对齐… 17

不会数数… 17

重复谭浩强《C程序设计》中的错误… 18

缺乏计算机基础常识… 18

滥造术语… 18

信口开河… 19

代码错误… 20

第1章:… 21

第2章:… 21

第3章:… 22

第4章:… 23

第5章:… 24

第6章:… 25

第7章:… 26

第8章:… 28

第9章:… 31

第10章:… 32

第A章:… 33

第B章:… 33

最后一个小插曲… 33

策划和副总编的问题… 34

呼吁与期待… 40

人民邮电出版社,北京

季仲华 社长

顾冲 副社长

综合出版中心 马嘉 社长

信息分社 刘涛 社长:

2012年10月,贵社出版并发行了一本《C程序设计伴侣》(以下简称《伴侣》)。经阅读之后,我们发现,这是一本涉嫌抄袭和欺骗读者、由C语言文盲(最多是一个C语言半文盲)粗制滥造的、严重误导初学者的C语言书。这本误人子弟的劣书最终得以出版流入市场,免备案空间,乃该书策划编辑、贵社图灵公司副总编陈冰一手促成。

该书至少存在如下一些问题:

抄袭拼凑

该书第一章的许多部分,是将那些从网上搜集的劣质资料复制粘贴或稍作文字修饰而成的(至少有12处:p.4、5、6、7、23、24),很多地方都是成段地抄袭。

这些资料中的大多数,本身就漏洞百出;有些资料彼此矛盾,却被《伴侣》原封不动地搬了过来,甚至其中的病句也照抄不误;有的资料原本是正确的,却被《伴侣》改错了。

例如:“C++语言……比C语言更容易为人们所学习和掌握”(p.5);“编译器只是将输入的.cpp等源代码文件生成.o为后缀的目标文件”(p.24)。

类似情况,第二章至少有3处(p.28、31、36);第四章至少一处(p.78);第七章至少一处(p.143)。

第B章类似情况则数不胜数,至少有24处(p.292、293、294、295、296、297、298、299、300、301、302、303、309、310)。该章基本是由各种网上资料拼凑而成:整段地复制豆瓣书评、网店图书介绍、百度百科、百度文库、甚至有其他作者原创并发表在网上的读书笔记和图书评论。(详见)

然而《伴侣》并没有以参考文献形式呈现上述资料,也没有在书中提及这些内容的出处,只在“致谢”中轻描淡写地说了一句:

“参考了一些网络上的资料,在此也一并感谢这些不知名的默默无闻的分享者”。

实际上,这些资料绝大多数都有署有原作者之名。在这种情况下,该书的编者贸然地将其列入“图灵原创”丛书并将其以“著”归于一位作者之名下,我们认为有欺世盗名之嫌。

欺骗读者

该书“怎样使用这本书”部分(p.6)告诉读者:“添加/Tp.编译选项进行编译”。

实际上使用/Tp. 参数编译的含义是:无论扩展名的源文件都会被当作C++源文件编译。换句话说,书中的很多代码是C++代码而压根不是C代码。这实际上是用C++代码来假冒C代码。

198页声称“我们先来编写这样一段使用函数指针的C语言代码”,然而其后及199页的两处“#include “stdafx.h” ”,及199页的两处“Functionp.ointer.cpp”都说明实际上它们是C++代码。

290页的插图赫然表明在此被调试的是一段C++代码;314页的代码同样说明了这一点,因为这段代码若以C程序对待,则根本就无法通过编译。

118页号称“开发一个嵌入式的程序”,实际上此程序和嵌入式八竿子打不着。

在我们看来,该书公然地出现上述内容是对读者的严重欺骗。然而为了掩饰用C++代码冒充C代码,《伴侣》“怎样使用这本书”部分竟然把这种谬误说成是“因为用到了一些特殊的编译器扩展”,却绝口不提这是在编译C++代码。

硬伤累累,错谬概念层出不穷关于关键字

“另外,这个头文件中定义的表示逻辑真假状态的关键字true和false的使用,可以让我们的程序更具可读性。” (p.73)

“使用true和false这两个关键字来表示逻辑上的真和假”(p.74)。

事实上,true和false从来都不是C语言的关键字。

关于标识符

“C语言中的标识符实际上就是给变量取一个名字,便于我们访问这个变量”(p.48)

事实上,标识符绝不是仅仅用于命名变量,还用于命名函数、命名类型、命名标号、命名常量……,也绝非仅仅是为了“访问”“变量”。

关于常量与变量

“在C语言中,除了使用const关键字来定义常量之外” (p.47)

实际上尽管不可显式改变const变量的值,但const变量依然是变量,与常量有本质的区别。

这说明:该书作者对C语言的“常量”(Constant)概念几乎完全无知。

“……在定义变量之前加上const关键词……所以这个变量……而成为一个常量” (p.47)

变量变成常量,比水变汽油还神奇。

“优先选择用const关键字来表示变量。” (p.48)

关键字不能“表示”变量。

“不能通过指向常量的指针修改它所指向的常量”(p.182)

根本不存在指向常量的指针。

关于运算符

荒谬地宣称“所有的二元运算符都可以与赋值运算符(“=”)相结合而形成组合赋值运算符”(p.60)。

事实上,很多二元运算符都不可能与赋值运算符组合成新的赋值运算符,例如&&、==、>=等二元运算符就不可能与赋值运算符组合成新的赋值运算符。

喜欢真实的人,要做真实的人,所以从来不会想要刻意模仿任何人。

315,关于《C程序设计伴侣》一书致人民邮电出版社的公开信

相关文章:

你感兴趣的文章:

标签云: