C陷阱与缺陷-笔记-1
2017-03-04 11:01
218 查看
第一章 词法分析
1.1关于“=”和“==”的区别
主要问题在于这两个运算符在if的条件语句中出现时的问题。
解决:如果if的条件中需要“=”赋值语句,则显式表达该语句的意思。比如判断赋值后的值是否为0,可以if( ( variable = function() ) != 0 ).
1.2 “&”和“&&”,“|”和“||”
基本就是错写的问题。含义不同。
1.3 词法分析的问题
词法分析有“贪心”的特点,即尽可能多地读入一个字符,因此可能读入的内容与程序猿想表达的内容不同。比如x除以p所指向的内容再赋值给y,写成y=x/*p,但“/*”会被当作一个字符,这时如果后面有注释语句“*/”,程序就不会报错,而只将x赋值给y。
解决:1.不同符号之间用空格隔开,这样可以避免歧义。2.显式使用括号表达操作符的运算顺序。
1.4第一个字符是0的整型常量会被当作八进制数
解决:别这么干。
1.5 字符与字符串
单引号和双引号的使用问题。单引号引起的一个字符实际上代表一个整数,决定于编译器使用的字符集。双引号引起的是字符串加‘\0’。
解决:记得字符串用双引号。
1.1关于“=”和“==”的区别
主要问题在于这两个运算符在if的条件语句中出现时的问题。
解决:如果if的条件中需要“=”赋值语句,则显式表达该语句的意思。比如判断赋值后的值是否为0,可以if( ( variable = function() ) != 0 ).
1.2 “&”和“&&”,“|”和“||”
基本就是错写的问题。含义不同。
1.3 词法分析的问题
词法分析有“贪心”的特点,即尽可能多地读入一个字符,因此可能读入的内容与程序猿想表达的内容不同。比如x除以p所指向的内容再赋值给y,写成y=x/*p,但“/*”会被当作一个字符,这时如果后面有注释语句“*/”,程序就不会报错,而只将x赋值给y。
解决:1.不同符号之间用空格隔开,这样可以避免歧义。2.显式使用括号表达操作符的运算顺序。
1.4第一个字符是0的整型常量会被当作八进制数
解决:别这么干。
1.5 字符与字符串
单引号和双引号的使用问题。单引号引起的一个字符实际上代表一个整数,决定于编译器使用的字符集。双引号引起的是字符串加‘\0’。
解决:记得字符串用双引号。
相关文章推荐
- 《C 陷阱与缺陷》笔记(一)
- C陷阱与缺陷阅读笔记(上)
- C陷阱与缺陷(C Traps and Pitfalls)--学习笔记--第一章:词法陷阱
- C陷阱与缺陷学习笔记
- C陷阱与缺陷学习笔记
- C陷阱与缺陷笔记
- C语言缺陷与陷阱(笔记)
- c缺陷与陷阱笔记-第四章 连接
- c缺陷与陷阱笔记-第六章 预处理器
- C的陷阱和缺陷研读笔记02
- C缺陷与陷阱学习笔记
- C缺陷与陷阱(笔记)[转]
- c陷阱与缺陷学习笔记
- C缺陷与陷阱 笔记
- C陷阱和缺陷学习笔记
- c缺陷与陷阱笔记-第三章 语义陷阱
- C陷阱与缺陷 笔记(一): 注释的嵌套
- C陷阱与缺陷阅读笔记(上)
- C语言缺陷与陷阱(笔记)
- C语言缺陷与陷阱(笔记)