(读书笔记)C缺陷与陷阱 第一、二章
2014-01-09 19:00
316 查看
看完一、二章,记些笔记,作为参考。。
1(1.3):词法分析中的"贪心法"--即每一个符号应该包含尽可能多的字符
譬如a---b 等同于 a -- -b,而不是a- --b;
譬如y=x/*p,编译器会把/*当成是一段注释开始,而不是看成y=x/(*p);
当然可以写成y=x/ *p,即中间加空格,无疑,加括号更加能清楚的表达本来的意图。
在实际编程中,要防止这种可能存在的准二义性问题,要明确表达意图。
2(1.4):整型常量若以0开头,会被视为八进制数。故10和010含义截然不同,注意之。
3(2.2):运算符优先级问题:
优先级最高的是:数组下标[]、函数调用操作符()、各结构成员选择操作符->
接下来是单目运算符:! ~ ++ -- - (type) * & sizeof
注意:单目运算符是自右向左结合的,故*p++等同于*(p++),而非*p(++)
接下来是双目运算符:算术>移位>关系运算符>逻辑运算符
注:(1)6个关系运算符优先级并不同:==,!=比其他的低,故a<b==c<d等同于(a<b)==(c<d);
(2)逻辑运算符之间的优先级都不同:位运算符>顺序运算符, 与(&,&&)>或(|,||)。
接下来是条件运算符,再是赋值。
注:赋值运算符的结合方式是从右到左的。。
即:a=b=0;等同于b=0;a=b;
4(2.6):悬挂else问题:else始终与同一对括号内最近的未匹配的if结合
1(1.3):词法分析中的"贪心法"--即每一个符号应该包含尽可能多的字符
譬如a---b 等同于 a -- -b,而不是a- --b;
譬如y=x/*p,编译器会把/*当成是一段注释开始,而不是看成y=x/(*p);
当然可以写成y=x/ *p,即中间加空格,无疑,加括号更加能清楚的表达本来的意图。
在实际编程中,要防止这种可能存在的准二义性问题,要明确表达意图。
2(1.4):整型常量若以0开头,会被视为八进制数。故10和010含义截然不同,注意之。
3(2.2):运算符优先级问题:
优先级最高的是:数组下标[]、函数调用操作符()、各结构成员选择操作符->
接下来是单目运算符:! ~ ++ -- - (type) * & sizeof
注意:单目运算符是自右向左结合的,故*p++等同于*(p++),而非*p(++)
接下来是双目运算符:算术>移位>关系运算符>逻辑运算符
注:(1)6个关系运算符优先级并不同:==,!=比其他的低,故a<b==c<d等同于(a<b)==(c<d);
(2)逻辑运算符之间的优先级都不同:位运算符>顺序运算符, 与(&,&&)>或(|,||)。
接下来是条件运算符,再是赋值。
注:赋值运算符的结合方式是从右到左的。。
即:a=b=0;等同于b=0;a=b;
4(2.6):悬挂else问题:else始终与同一对括号内最近的未匹配的if结合
相关文章推荐
- C陷阱与缺陷:第一,二章
- 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子
- C陷阱与缺陷 读书笔记
- 《程序设计实践》读书笔记第一至二章
- <C缺陷和陷阱>读书笔记
- C陷阱和缺陷(C Traps and Pitfalls)-读书笔记
- 读书笔记--C陷阱与缺陷(二)
- 《Linux内核设计与实现》读书笔记——第一、 二章
- 读书笔记--C陷阱与缺陷(四)
- C缺陷与陷阱读书笔记
- C陷阱与缺陷 —— 读书笔记-1、词法“陷阱”
- 读书笔记--C陷阱与缺陷(三)
- 读书笔记--C陷阱与缺陷(七)
- 读书笔记 · C陷阱与缺陷 · 第1章 词法“陷阱”
- TCP/IP详解:第一、二章读书笔记
- <<C 陷阱与缺陷>>读书笔记
- 读书笔记--C陷阱与缺陷(五)
- 读书笔记--C陷阱与缺陷(五)
- 《linux内核设计与实现》读书笔记第一、二章
- 读书笔记--C陷阱与缺陷(四)