读前50页中的错误分析有感
T老先生的真正错误应该是这几个:
1. 关于ANSI C的介绍:1983年。。。制定了新标准,称为ANSI C。K&R在1988年修改了他们的名著(。。第二版)。1987年,ANSI 又公布了新标准----87 ANSI C。1990年国际标准化组织ISO接受87 ANSI C为ISO C的标准。1994年,ISO修改了C语言标准。-----这是T先生2005年的第三版上的文字(后面的内容都以2005年的第三版为例)。
关于ANSI C除了T老先生的说法,别的书上(中和外)都说:ANSI 在1983年设立了一个委员会以发展(译为开发更好)一个新标准,该标准于1989年正式采用。。。。国际标准化组织于1990年采用一个C标准(ISO C)。ISO C和ANSI C实质上是同一个标准。ANSI/ISO标准最终版本通常被称为C89或C90.。。。1994年,修订标准的工作开始了,这一努力的结果是产生了C99标准。----这是C Primer Plus(第五版)中文版的内容。
T老先生来了个超时空转换。
2.关于switch语句:T老先生写到:
它的一般形式如下:
switch(表达式)
{
case 常量表达式1: 语句1
case 常量表达式2: 语句2
.
。
case 常量表达式n: 语句n
default: 语句n+1
}
...
说明:
(1)switch后面括号内的”表达式“,ANSI C标准允许它为任何类型。
。。。
这里有两个大问题:case子句中的语句应该是语句序列(或称语句组),switch后面括号内的”表达式“,ANSI C标准只允许它为与整类型兼容的类型。T老先生的又一个超时空转换。翻番他的第一版“switch后面括号内的”表达式“,可以是整型表达式或字符型,也可以是枚举类型数据(见第十章)。对其它类型,原来的C标准是不允许的,而新的ANSI C标准允许上述表达式和case常量表达式为任何类型。”-----不用我再说了吧----与时俱进,不会将正确的又改成错误的吧?!----这个新的ANSI C是哪里来的啊?
3.关于void指针类型
“也可以将一个函数定义为void*类型,例如:
void* fun(char...)
表示函数fun返回的是一个地址,它指向”空类型“,。。。”
void在K&R的书明确指示为nonexistent(不存在),而Pointers to Void(即void*)的含义绝对不是指向“不存在”,而是泛类型或通用类型指针。
4.关于函数的返回值
(4)对于不带回值的函数,应当用“void“定义函数为”无类型“(或称”空类型“)。。。。此时在函数体中不得出现return语句。
----------return;不允许吗?
5.关于函数原型:
。。。一般形式有两种,分别为
(1)函数类型 函数名(参数类型1,参数类型2,。。。)
(2)函数类型 函数名(参数类型1,参数名1,。。。)
印刷错误点到为止:(2)参数类型 和参数名之间不应该有逗号!
重要的是函数类型究竟是什么?是单一的函数返回值类型还是返回值类型 (参数类型,。。。)
不再说了吧,我也没有那么多的时间的精力!
==================================
一般人读书可以没有我这么”叫真“,请读者翻开书仔细看看吧