C陷阱与缺陷(小结1)
2015-07-16 10:14
295 查看
一. 词法分析
(将程序分解成符号的过程)
P.S:程序中的单个字符孤立起来没有任何意义,只要结合上下文才有意义。
1.=不同于==
=:赋值运算符
==:关系运算符
注意:不要把赋值运算符用成了关系运算符;也不要把关系运算符用成了赋值运算符(当确实需要对变量赋值并检查该变量的新值是否为0时,最好的处理方法是—显式地进行比较,如if((x=y)!=0)或将常量放在关系运算符的左侧)。
2.&和|不同于&&和||
&和|表示按位与或非的运算,操作结果为任意数值。
&&和||表示逻辑操作,操作结果只能为0或1;且当左侧的表达式能决定结果时,就不再进行右侧表达式的计算(短路运算的性质)。
3.词法分析中的“贪心法”
每一个符号应该包含尽可能多的字符
如:a---b,应翻译为(a--)-b, y=x/*p应翻译为y=x/(*p)
4.整型常量
若一个整型常量(或字符常量)的第一个字符是0,则该常量将被视为八进制。
如:char c=040,printf(“%d\n”, c),则输出结果为32.
5.字符与字符串
字符:单引号引起的,实际代表一个整数(ASCII码);
字符串:双引号引起的,代表一个指向无名数组起始字符的指针,该数组的初始化值为双引号之间的字符及一个额外的二进制值为零的字符’\0’。
(将程序分解成符号的过程)
P.S:程序中的单个字符孤立起来没有任何意义,只要结合上下文才有意义。
1.=不同于==
=:赋值运算符
==:关系运算符
注意:不要把赋值运算符用成了关系运算符;也不要把关系运算符用成了赋值运算符(当确实需要对变量赋值并检查该变量的新值是否为0时,最好的处理方法是—显式地进行比较,如if((x=y)!=0)或将常量放在关系运算符的左侧)。
2.&和|不同于&&和||
&和|表示按位与或非的运算,操作结果为任意数值。
&&和||表示逻辑操作,操作结果只能为0或1;且当左侧的表达式能决定结果时,就不再进行右侧表达式的计算(短路运算的性质)。
3.词法分析中的“贪心法”
每一个符号应该包含尽可能多的字符
如:a---b,应翻译为(a--)-b, y=x/*p应翻译为y=x/(*p)
4.整型常量
若一个整型常量(或字符常量)的第一个字符是0,则该常量将被视为八进制。
如:char c=040,printf(“%d\n”, c),则输出结果为32.
5.字符与字符串
字符:单引号引起的,实际代表一个整数(ASCII码);
字符串:双引号引起的,代表一个指向无名数组起始字符的指针,该数组的初始化值为双引号之间的字符及一个额外的二进制值为零的字符’\0’。
相关文章推荐
- Tim Sweeney解释为什么Unreal Engine 4全面转向C++
- 实现卫星菜单和自定义title
- 变量的类型转换
- linux下安装Atom编辑器
- 英语缩写(未完待续)
- 手机抄表产品说明模板
- get与post一些特殊情况下
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
- 计算机基础-内存管理
- 社説 20150716 安保法案可決 首相は丁寧な説明を継続せよ
- linux 使用FIO测试磁盘iops
- Linux性能测试工具之Lmbench特性、安装及使用
- 判断闰年
- osg与qt结合
- ZYNQ的启动过程
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
- js无法删除cookie问题
- 多线程在VC++串口通信程序中的应用
- VS2010添加TSTCON( ACTIVEX CONTROL TEST CONTAINER )工具
- 在类外部定义类的成员函数