老谭C语言挑刺之硬伤
书上的错误可分做两类,很容易分辨的是非分明的错误,可以叫做硬伤。不容易分的错误,对当前产生的不良反应不大,可能对以后产生不良后果的,叫做软伤。前五十页硬伤调查如下:
第1页第1行:…,它适于作为系统描述语言,…
修改建议:系统描述改成“系统程序设计”语言。C语言就是为UNIX操作系统而生的。
第2页表格:if (e) S; if (e) then S
修改建议:if (e) then S ;
在C语言里,分号是普通语句的结束符号。
第2页倒数第三段:C程序比Pascal简练,源程序短,因此输入程序时工作量少。
修改建议:这项工作没人做过统计,但大家看到这里不至于误导,认为录入代码快编程就一定效率高。
第3页第7、8行:例如整型量与字符型数据以及逻辑型数据可以通用。
修改建议:C语言是没有“逻辑型数据”的,可加上其他语言。
第4页,程序:This is a c program.
修改建议:This is a C program。通观世界上所有有关C语言的重要著作,C语言的名字“C”都是用大写表示。
第5页第9行:注释可以出现在程序中的任何位置。
修改建议:注释也不是随便加的,适当时加在适当的位置,一般单独一行或在行尾部。
第6页第13行:可以说C是函数式的语言。
修改建议:以函数为单元或基本结构的语言。而函数式语言是专有名词,很相象数学里的函数,采用与数学里的函数相类似的表 达方式,这与比较常用的C、Basic不怎么相同。
第14页第18行:计算机算法可分为两大类别:数值运算算法和非数值运算算法。
修改建议:算法的分类不要枉下定义,有“数值算法”,但没有“数值运算算法”。
第22页倒数第6行:1966年,Bohra和Jacopini提出了以下三种基本结构,…
修改建议:1960年,在ALGOL 60里这三种结构已经很清楚了。
第26页第1行:全部算法写在一个矩形框内…
修改建议:全部算法由许多矩形框上下堆叠而成一种顺序结构,其中的每一个框还可以…此处没有描给出N-S图的特征。
第28页第18、19行:一个结构化的算法(例图2.12)可以由一个等价的非结构化算法(如图2.35)代替,其功能不变。
修改建议:结构化算法和非结构化算法在更广阔的空间中才有意义,一个小程序说服力不大。
第32页倒数第6段:一个结构化程序就是用高级语言表示的结构化算法,
修改建议:结构化程序其实是剔除了goto之类自由度太大的语句而得到保证的。
第39页倒数第4到2行:变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。
修改建议:首先,变量名根本不是什么符号地址?它不过是在程序中代表变量的一种记号。一个变量也未必有地址(如寄存器变量),未必有唯一的地址,这些都说明,将变量名看成符号地址是不行的,说不通的。其次,系统是给变量分配地址,而不是给“变量名”分配地址。
第41图3.2(b)。
修改建议:两个字节分离,要注意byte order(字节序)问题,将低地址和低位联系起来,实际放起来要将两数倒过来。
第49页第6行:字符型变量用来存放字符常量。
修改建议:到底是变量还是常量?如果一个变量里存放了一个常量,存放之后还能修改吗?要是能修改,那怎么叫常量呢?要是不能修改,那怎么叫变量呢?这里根本就没“常量”什么事!字符型变量里存的东西,大家都称它为“字符值”。


0 Comments:
发表评论
<< Home