Posts Tagged ‘C++’

'long long long' is too long for GCC

Friday, March 27th, 2009

From blog

From blog
Tags:

Related Posts

读《C陷阱与缺陷》("C Traps and Pitfalls")

Monday, March 9th, 2009

记得有很多次都在书店看到这本书了,但是看了看觉得买下不太值,所以就一直没买,上上星期到省图书馆看到这本书,书不厚,就借来看看。

这本书写于上世纪八十年代,在计算机书籍中已经算是很旧的了,我觉得这书现在来看除了作者原本要传达的意思,还多了许多讲述历史的成分,让我们知道了很久以前的 C 语言是什么样子的。那时侯,连 ANSI89 都没有定下来,书中讨论了很多是用 ANSI 的新写法,还是为了兼容而用老写法的问题,现在这个问题应该已经没有什么价值了吧?书中不少陷阱和缺陷也就被 fixed。

举个例子,很久以前,有的编译器允许对字符串字面值进行修改,现在看来,已经是非常荒唐的事情了。(让我想起潭浩强在书里修改字符串字面值的事,或许他用的是很有年头的编译器?呵呵)

不过,现在的 C 语言还是那么诡异,有不少陷阱和缺陷,这本书也算是个 check list,查漏补缺。里面许多东西我以前都见过了(或者真的犯过),不过还有不少我们没见过的,呵呵。

我知道的比如,getchar() 的返回值是 int,dangling else,switch,求值顺序等等。

不知道的也很多,比如分析 token 的时候的贪心方法,a[i] 和 i[a] 一样等等,还有 varargs 等的用法。

推荐大家看看,应该用不了多长时间,当是查漏补缺了。

Tags:

Related Posts

C++ Primer 随记——第 6 章,语句

Monday, February 23rd, 2009
  1. case 标号必须是整型常量表达式。(Page 176)
  2. 任意两个 case 标号不能相同。(Page 176)
  3. 对于 switch 结构,只能在它的最后一个 case 标号或 default 标号后定义变量。(Page 176)
  4. 在循环条件中定义的变量在每次循环里都要经过创建和撤销的过程。(Page 178)
  5. goto 语句不能跨越变量定义向前(下)跳转。(Page 185)
  6. goto 语句只能在同一函数内跳转。(Page 185)
Tags:,

Related Posts

C++ Primer 随记——第 5 章,表达式

Monday, February 23rd, 2009
  1. 负数的位运算,符号位的处理是机器相关的。(Page 134)
  2. 有符号数的右移操作插入符号位的副本或者 0,具体由实现而定。(Page 134)
  3. 以为操作符的有操作数必须非负,并且严格小于左操作数的位数,否则,结果是未定义的。(Page 134)
  4. 只有逻辑与、逻辑或、条件运算符和逗号运算符规定了求值顺序。(Page 148)
  5. 包含 signed int 和 unsigned int 的表达式, signed int 会转换为 unsigned int。(Page 155)

疑问:

  1. 强制类型转换。
Tags:,

Related Posts

C++ Primer 随记——第 4 章, 数组和指针

Sunday, February 8th, 2009
  1. void* 指针只支持几种有限的操作:比较、传参数、赋值。不能通过 void* 指针操纵它所指向的对象。(Page 104)
  2. void* 不是万能的,它不能指向 const 对象,使用 const void* 指向 const 对象。(Page 110)
  3. 指向 const 对象的指针也必须具有 const 特性。(Page 110)
  4. 定义指向数组的指针要注意优先级。比如 int (*ip)[4];。(Page 123)
Tags:,

Related Posts