《C陷阱与缺陷》 Andrew Koenig 读书笔记
1.1 =和==
编写时建议:
将变量放到==
的后方,编译器可以检测误写成=
的错误
int a=1;
if(1==a){
//...
}
1.2 &和 | 不同于&&和 ||
1.3 语法分析的“贪心法”
c语言中符号有的只有一个字符长度(
/
*
=
)有的是多个字符(/*
==
)
编译器在判断时的规则是“
每个符号应该包含尽可能多的字符
也就是说:
编译器从左往右读字符,如果该字符可能组成一个符号,再读入下一个字符,判断这两个符号是否可以组成一个字符,如果可以,继续读入下一个字符,重复上述判断
举例:
a---b
的实际意图是:a-- -b
即先a--
然后将结果减b
而不是a- --b
a减去 减减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'初始化
网友评论
但是一直觉的在实际开发应用中写出类似a---b这样类型的代码的人一定是初学者。