再读《C语言陷阱与缺陷》

《C Traps and Pitfalls》确实是一本值得细读的书。
国庆假期,不知道不觉又找了出来,看了一会。

1. 从编译器的词法分析器(lexical analyzer)角度去看带问题总是再好不过了。
词法分析器将把程序分析成一个个记号(token), 每一个记号由一个或多个字符组成,
例如 ++, +, --, 甚至关键词之类,他们在编译时具有一个(相关的)统一的意义。

从这个角度,可以发现,例如 "x= y/*z" 会出现注释z的情况。 陈旧的编译器会觉得 "a=/*b" 是 "a /= (*b);"
而 += 符号则是由两个记号组成,特别的 a + /*you know it*/ = b 编译器在处理时认为是 a +=b
而特别的 a -(空格)> b 是非法的。

2. 关于(*(void(*)())0)();的若干问题。 这个博客里搜索"C语言陷阱与缺陷",我曾经有提到过。

3. 优先级的问题总让人头疼,如果一时不确定,就用括号处理。如果可以,就去查手册吧。这里不再叙述。
彩蛋: z = a
											
此条目发表在C, 编程分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注