《C陷阱与缺陷》 Andrew Koenig 读书笔记
1.1 =和==
编写时建议:
将变量放到==的后方,编译器可以检测误写成=的错误
int a=1;
if(1==a){
//...
}
1.2 &和 | 不同于&&和 ||
1.3 语法分析的“贪心法”
c语言中符号有的只有一个字符长度(
/*=)有的是多个字符(/*==)
编译器在判断时的规则是“
每个符号应该包含尽可能多的字符
也就是说:
编译器从左往右读字符,如果该字符可能组成一个符号,再读入下一个字符,判断这两个符号是否可以组成一个字符,如果可以,继续读入下一个字符,重复上述判断
举例:
a---b
的实际意图是:a-- -b即先a--然后将结果减b
而不是a- --ba减去 减减b
注意: 在写的时候加上空格,或者括号将更便于阅读。
y=x/*p; //会解释为注释符号
y=x / *p; //正确解释为 x除以*p,因为/和空格不能组成一个符号
y=x/(*p); //正确解释
1.4 整型常量
如果一个整型常量的第一个字符是数字0 ,该常量会被视作八进制
- 159 是十进制整数159
- 0159 是八进制,是十进制的141
注意:
在上下文中为了格式对齐,而无意中在十进制前添加了0
046
046
125
1.5 字符与字符串
' '的是字符
“ ”的是字符串
-
单引号括起来的一个字符代表一个整数 -
双引号括起来的一个字符代表一个指针
双引号的字符串代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及额外的一个二进制值为零的字符'\0'初始化