c陷阱与缺陷的读后总结
第一章 关于词法“陷阱”(主要讲符号和组成符号的字符间的关系以及一些常见错误)
新定义
符号:是指程序的一个基本组成单元,其作用相当于一个句子中的单词。
1.1 =不同于==
在c语言中,=代表赋值符号,而==代表比较符号。在写程序时,要格外注意以防误用。
例如:要表示(x==3)
但是却误写成了(x=3)
解决方法是 用(3==x)
代替(x==3)
在赋值操作时,编译器不允许左值为常量。
1.2 &和|不同于&&和||
前者是位操作运算符,而后者是逻辑运算符。
1.3 词法分析中的贪心法
翻译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入一个下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。
此处在写程序时要避免二义性例如a---b
和(y=x/*p)
前者所代表的含义是(a--)-b
,而后者会把/*
作为注释的开始。
解决方案两种:
第一种是将*p
加括号;
第二种则是在符号中间加空格符 如:y = x / *p
(此处解释为:除了字符串与字符常量,符号的中间不能嵌有空白(空格符、制表符和换行符)。
1.4 字符与字符串
c语言中用单引号引起的一个字符实际上代表一个整数。
而用双引号引起的字符串,代表的确是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制为零的字符'\0'初始化。
第一章到此结束!
网友评论