《C陷阱与缺陷》读书笔记--第一章语法陷阱1

1.1 = 不同于== =为负值运算符,==比较运算符。在C语言中=座位一种操作符对待,因而重复进行负值操作(如 a = b = c)可以很容易书写,并且赋值操作语句可以很容易的嵌入到更大的表达式中。 这种使用上的便利性容易导致一个问题,就是程序员本意是作比较运算时,却无意中写成了赋值运算,这样会带来意想不到的结果,所以,在写= 与 ==时一定要格外小心。
1.2 & 和 | 不用于 && 和 || 上面讲到 = 和 ==容易搞混,那么 & 和 && 与 | 和 ||也非常容易被搞混,首先需要明白的是 | 和 & 是位运算符,直接操作的是整数浮点数等值的二进制,而 ||和&& 是逻辑运算符,使用||和&&的表达式的结果是 true 或者 false ,在我们书写程序的时候一定要分清二者的作用和使用场景,然后在考虑使用哪个符号来完成你的程序。
1.3词法分析中的贪心法
C语言中的/ 、*、=只有一个字符长,成为单字符符号,而C语言中的其他符号 ,例如: == 、/*包括多个字符,成为多字符符号。当编译器读到一个字符”/"后面跟一个"*"字符,编译器就要做出判断:是将它们作为一个两个单独的符号进行对待,还是合起来作为一个符号进行对待。C语言对于这样的问题的解决方案可以归纳为一个简单的规则:每一个符号都应该包含尽可能多的字符,也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字符,重复上述判断,直到读入的符号已经不再可能组成有意义的符号。这个策略被称为”贪心法“。在我们遇到比较发杂的表达式的时候,使用贪心法能很好的让我们正确的读懂表达式的含义,例如:表达式 a---b 和表达式 a-- -b的含义是相同的 而与 a- --b的含义是不同的。

    推荐阅读