挂羊头卖狗肉蓄意欺骗读者——谭浩强《C程序设计(第四版)》中所谓的“按照C99”(二)

在《谭C》p4:“本书的叙述以C99标准为依据”,下面从C89到C99的主要变化方面来看看是不是这样。

  1. 《谭C》(前言)p12:

①  数据类型介绍中,增加了C99扩充的双长整型(long long int)、复数浮点型(float complex,double complex ,long long complex)、布尔型(bool)等,使读者有所了解。

实际上,C99不但增加了long long int,还增加了unsigned long long int以及扩展整数类型;C99中压根就没有float complex,double complex ,long long complex以及bool

  1. 《谭C》(前言)p12:

②  C99要求,main函数的类型一律指定为int型,并在函数的末尾加一个返回语句“return 0;”。

实际上,main函数的类型一律指定为int型是C89的要求,并且C99标准并没有要求在main()末尾必须写语句“return 0;”。

  1. 《谭C》p5:

C99又扩充了……布尔类型(bool)等。

实际上,C99增加的是_Bool类型。

  1. 《谭C》p6:

C99建议把main函数指定为int型(整型)。

C99根本没有这样建议。

  1. 《谭C》p39:

“(2)实型常量。有两种表示形式”

实际上在C99中还有hexadecimal-floating-constant常量。

  1. 《谭C》p41:

“C99允许在函数中的复合语句(用一句花括号括起来)中定义变量。”

C语言从诞生至今一向如此,这跟C99半毛钱关系都没有。

  1. 《谭C》p41:

“C99允许使用常变量。”

const关键字C89就开始有了,而且“常变量”这个翻译很蠢。

  1. 《谭C》p42:

“C语言规定标识符只能由字母、数字和下划线3种字符组成。”

实际上C99规定标识符还可以由universal-character-nameother implementation-defined characters组成。

  1. 《谭C》p42:

“因此C99把字符型数据作为整数类型的一种”

信口开河。字符从来都是整数类型。

10.《谭C》p43:

“布尔型(bool)

float_complex,double_complex,long long_complex”

对于C99来说,这些都属于常识性错误。

 

11.《谭C》p49:

“浮点型数据是用来表示具有小数点的实数的 。”

C99中浮点类型包括实数浮点类型和复数浮点类型

12.《谭C》p50:

“浮点数类型包括float(单精度浮点型)、double(双精度浮点型)、long double(长双精度浮点型)。”

这个说法证明老谭对C99还处于根本没入门的地步。C99中清楚地写着:

The real floating and complex types are collectively called the floating types

 

13.《谭C》p53:

“两个整数相除的结果是整数,如5/3的结果值为1,舍去小数部分。但是如果除数或被除数中有一个为负值,则舍入的方向是不固定的。”

又是信口开河。来看看C99怎么讲的:

When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.

14.《谭C》p54:

“(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有的float型数据都先转换为double型,然后进行运算。”

错得没边了。

不要说C99不是这样,就是更早的C89也不是这样。系统将所有的float型数据都先转换为double明显是从几十年前早已过时的C语言书上抄来的。

C99有复数类型,如果“+-*/运算的两个数中有一个数为floatdouble型”,另一个是复数类型,结果不可能是double型。

况且,即使是C89,如果一个操作数是float另一个是long double 类型,结果也不可能是double

 

15.《谭C》p107:

“程序4:可以在程序中使用C99提供的逻辑变量和逻辑常量truefalse……

#include <stdbool.h>

……

注意:目前一些C编译系统(包括Visual C++6.0)还未完全实现C99标准,因此不能运行程序4……可把作为C++程序来运行(C++有些功能),把文件名后缀改为.cpp。并将第12行改为

#include <iostream>

狗带嚼子——胡勒。公然教唆小朋友学坏,C语言和C++完全是两回事。

16.《谭C》p132:

“从附录F中可以看到:在C库函数中,有两个求绝对值的函数”

C99中求绝对值的函数根本不是两个,附录F根本不是C99库函数,是用过时的东西欺骗读者。

17.《谭C》p143:

“定义一维数组的一般形式为

类型符 数组名[常量表达式];”

无论从C89还是C99标准来说都是错误的

C89来说,“常量表达式”是不准确的,不是任何常量表达式都可以;从C99来说,并没有要求一定是“常量表达式”

18.《谭C》p143:

“不能包括变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如下面这样定义数组是不行的:

int n;

scanf("%d",&n) ;   //企图在程序中临时输入数组的大小

int a[n];”

这段代码在支持C99的编译器下没有问题。int a[n];C99中完全合法,这就是C99的一个重要新特性——VLA

19.《谭C》p143:

“如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。如:

void fun(int n)

{

int a[2*n];   //合法,n的值从实参传来

……

}”

没见过这样自己打脸的。前面刚刚讲完[]内只能是“常量表达式”,一转眼又说int a[2*n];   //合法。完全是自相矛盾,

这种自相矛盾带给初学者的不止是错误还有混乱和无所适从。

如果按C89来说,这段论说是绝对错误的。

如果按C99来说这段说法依然是错误的,因为main()与其他函数相比除了是程序开始执行的位置之外没有什么特殊的,“不包括主函数”的说法完全是不懂装懂的信口开河,没有任何根据。

 

20.《谭C》p143:

“在调用func函数时,形参n从实参得到值。这种情况称为“可变长数组”,允许在每次调用func函数时,n有不同的值。”

这又是胡扯。C99压根就没有规定VLA需要从实参得到值。

 

这里所举的例子,只是《谭C》中涉及到C99的极少的一部分而已。

从这些例子中已经不难看出,该书所谓的C99,似是而非者有之;编造关键字者有之;把非C99内容硬说成C99者有之;因对C99无知而偷工减料者有之;信口开河有之;……一句话,除了知道C99增加了一种新形式的注释和增加了long long int类型之外,该书作者根本不懂得C99

该书中涉及到C99的内容,95%以上都是错误的。这说明该作者不但没读过C99标准,甚至没读过有关C99的有关书籍或文章。整本书基本上无非是新瓶装旧酒,就如同把过期食品贴了一张新日期标签再涂点新鲜的油彩一样,大言不惭地就上市了。

作为该书的作者,对自己对于C99一窍不通的情况绝对应该是心知肚明的,因此,这种把完全过时、错谬百出的旧书伪装成“C99”出版是对读者的欺骗。这不是学术水平问题,而是道德品质问题。

转载于:https://www.cnblogs.com/pmer/p/4006698.html

挂羊头卖狗肉蓄意欺骗读者——谭浩强《C程序设计(第四版)》中所谓的“按照C99”(二)...相关推荐

  1. 谭浩强C程序设计第四版答案

    只给出一些需要编程的答案,用的是谭浩强老师的书: 本文持续更新中- C程序设计课本中的一些笔记见:C程序设计笔记 我的目录 只给出一些需要编程的答案,用的是谭浩强老师的书: 本文持续更新中... C程 ...

  2. 谭浩强C程序设计第五版课后答案视频+代码讲解完整版(合集)持续跟新中~~~

    这里是一个谭浩强C程序设计第五版课后答案的合集 请看下面: 工欲善其事必先利其器 写C语言代码,首先得有安装一个趁手的工具,那么VS系列是最合适不过的了 这里是安装教程: VS2013安装教程和使用 ...

  3. C语言的学习第一天——谭浩强C程序设计第五版

    学习了谭浩强C程序设计第一章 编译器:VS2019 鹏哥C语言:c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程 ...

  4. c语言程序灵魂编译后,谭浩强C程序设计第4版精讲视频课程

    谭浩强<C程序设计>(第4版)网授精讲班[教材精讲+考研真题串讲] 本课程由资深辅导教师马丽梅老师讲授,全面讲解教材的重点.难点.考点,教会学员理解并掌握该教材中的基本概念.基本原理和基本 ...

  5. matlab将单词China译成密码,要将china译成密码 C++源代码 (谭浩强c++程序设计第3版答案)...

    要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母. 例如,字母"A"后面第4个字母是"E", "E ...

  6. 谭浩强C语言第四版第九章课后习题7--9题(建立,输出,删除,插入链表处理)...

    1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N sizeof(link) 4 typedef struct stu 5 ...

  7. c++第九次作业(谭浩强c++程序设计第三版P400习题)

    1.改写为多文件程序???????????????? 2.比较函数重载和虚函数在概念和使用方式上的区别 1)概念上: 1>函数重载在同一个类中,虚函数是父类与子类 2>函数重载时重载的函数 ...

  8. 在c语言中,字符串topt65的长度是,谭浩强c__程序设计第13章.ppt

    谭浩强c__程序设计第13章 第13章 输入输出流 13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流 13.1 C++的输入和输 ...

  9. 谭浩强C程序设计(第五版)P82 习题六(求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积)——中职

    谭浩强C程序设计(第五版)P82 习题六 设圆半径r = 1.5,圆柱高h = 3,求圆周长.圆面积.圆球表面积.圆球体积.圆柱体积.用scanf输入数据,输出计算结果,输出时要求文字说明,取 小数点 ...

最新文章

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
  2. OpenCV+python:图像金字塔
  3. 如何解决现有的问题——VBA课程第五次讨论2007年12月13日
  4. .NET Core + Spring Cloud:API 网关
  5. 经典回溯之火柴拼正方形
  6. 第二节:Css重写样式
  7. 潘石屹接连带货 Python,要来抢我们的饭碗?
  8. 不同数据库模式下DATE类型的行为解析
  9. iphone如何分屏_苹果手机如何操作分屏 苹果手机录屏没有声音这么做轻松解决...
  10. centeros下安装python
  11. pandas中merge()函数的用法详解
  12. for的循环在php那边使用,for循环如何在php怎么中使用
  13. python脚本批量登录crt_python批量修改SecureCRT会话密码-阿里云开发者社区
  14. Kubernetes环境下如何运行Coherence缓存集群
  15. win10 蓝牙搜不到设备怎么办
  16. android音频格式,适用于iOS和Android的音频格式
  17. 豆瓣fm android,豆瓣 FM
  18. 空间信息产业的八大极客技术
  19. 《知识产权法》雨课堂期末答案
  20. [报错解决]CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is required to downl

热门文章

  1. spark:spark-submit 提交任务及参数说明(yarn)
  2. 我想到了一个站长赚钱的捷径
  3. 【BIM+GIS】BIM模型导入GIS软件之前的一些处理设置
  4. js轮播图的普遍问题
  5. creator DrawCall 优化
  6. javaFx实现毛笔笔锋效果,基于bezier曲线
  7. 熔断机制 Hystrix 的使用
  8. 诊断仪在线$3E服务
  9. Vue的MVVM模型和双向数据绑定原理
  10. 盒子模型的初识及css标签使用