Mar 20
看了新到中这篇文章之后很是诧异。短短三段话,错误一大堆。以下是我的评论:
1、C和C#是两个完全不同的语言。除了语法看起来有点像之外,没有任何可比性。谭的书可是讲的C语言,勉强把C++拿来说说也罢,C#是怎么冒出来的?
2、1999年的C标准(实际上是ISO C而不是ANSI C,通常称之为C99)实际上是C语言“最新”的标准,而不是什么“古老的东西”。而且在网上最多只能找到这个标准的草稿。毕竟人家ISO要拿来卖的。
3、事实上,最容易获得的是C89。这是因为C89已经包含在C语言的“圣经”,K&R第二版里面了。这本书就算是正版价格也不贵,相信张云楼老师还是买得起的。
4、目前C标准只有三个版本,C89、C90以及C99。没有哪一个标准允许switch带非整数参数(注意是整数不是整型)。不管是什么标准,找个C编译器(如谭师傅推荐的古董TC)试试不就好了?最好的莫过gcc,因为用它编译时可以指定用哪一版本的标准。
5、从g3like列出的C#中switch可以接受的类型来看,除了string,其它也都可以表达为整数。如果可以相信这个列表是完整的,那么就算是在C#里switch也不能接受“任何类型”吧?“也许是正确的”这样的诊断从何而来?
6、 实事上,C语言的switch可以接受的类型除了整型、字符型和枚举型以外,还包括短整型、长整型、长长整型,以及所有这些的有符号和无符号的类型。也就 是说,g3like列出的C#接受类型中,只有string是C语言里没有的类型以外,其它的相对应的C类型都可以被C语言的switch接受。
7、C++里面的switch也同样不能接受整数类型以外的类型。
2009年3月20日 at 1:29 pm
网上有很多draft可以下载,http://www.open-std.org/
话说回来了。我不知道这些人到底有没有看过这些标准。因为他们谈到的问题几乎涉及不到标准的改动。而作为一门入门级的课程,开始的时候这些不同也几乎体现不出来。
谭的问题在于其所谈的一些内容只能在谭氏标准和谭氏编译器及编译环境下才是正确的。