软件编程低级错误:表达式知识讲解.ppt

软件编程低级错误:表达式知识讲解.ppt

ID:59927294

大小:620.00 KB

页数:12页

时间:2020-11-28

软件编程低级错误:表达式知识讲解.ppt_第1页
软件编程低级错误:表达式知识讲解.ppt_第2页
软件编程低级错误:表达式知识讲解.ppt_第3页
软件编程低级错误:表达式知识讲解.ppt_第4页
软件编程低级错误:表达式知识讲解.ppt_第5页
资源描述:

《软件编程低级错误:表达式知识讲解.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、软件编程低级错误:表达式表达式使用默认优先级:规则【规则】ISO9899:1990的6.5.4节对使用括号的建议:1.一元运算符,不需要使用括号x=~a;/*一元运算符,不需要括号*/x=-a;/*一元运算符,不需要括号*/2.二元以上运算符,如果涉及多种运算符,则应该使用括号x=a+b+c;/*运算符相同,不需要括号*/x=f(a+b,c)/*运算符相同,不需要括号*/if(a&&b&&c)/*运算符相同,不需要括号*/x=(a*3)+c+d;/*运算符不同,需要括号*/x=(a==b)?a:(a–b);/*运算符不同,需要括号*/

2、3.即使所有运算符都是相同的,如果涉及类型转换或者量级提升,也应该使用括号控制计算的次序以下代码将3个浮点数相加:f4=f1+f2+f3;/*除了逗号(,),逻辑与(&&),逻辑或(

3、

4、)之外,C标准没有规定同级运算符是从左还是从右开始计算,以上表达式存在2种计算次序:f4=(f1+f2)+f3或f4=f1+(f2+f3),浮点数计算过程中可能四舍五入,量级提升,计算次序的不同会导致f4的结果不同,以上表达式在不同编译器上的计算结果可能不一样,建议增加括号明确计算顺序*/表达式使用默认优先级(1)【问题描述】同一个目录下发布多个频道到

5、一定值后,虽然是计费频道,但实际访问时并没有付费定购提示,好像变成了免费模式【问题定位】问题代码如下:StringcurDirPosition=(longCurDirPosition%100>9)?"":"0"+longCurDirPosition%100;程序的本意是根据longCurDirPosition%100>9的值,输出”longCurDirPosition%100”或者””0”+longCurDirPosition%100”。在换行符的作用下很容易让人以为程序是没有问题的,但实际上程序执行的优先级与作者的期望不符,以上语句

6、等价与:StringcurDirPosition=(longCurDirPosition%100>9)?"":("0"+longCurDirPosition%100);结果将输出””或者”’0’+longCurDirPosition%100”【纠正措施】补充一对括号,修改代码为:StringcurDirPosition=((longCurDirPosition%100>9)?"":"0“)+longCurDirPosition%100;表达式使用默认优先级(2)【问题描述】对密码进行MD5加密的时候,得出来的结果每次都是空。【问题定位

7、】如下代码:ucPwdLen=ucPwdLen&0xf0+0x10;程序执行的实际优先级为:ucPwdLen=ucPwdLen&(0xf0+0x10);【纠正措施】补充一对括号,修改代码为:ucPwdLen=(ucPwdLen&0xf0)+0x10;表达式使用默认优先级(3)【问题描述】香港鉴权二次重同步出现SQN混乱。【问题定位】如下代码:if((sqn.seq2+1)&0x01000000>0){……….}由于>运算符优先级大于&,程序执行的实际优先级为:if((sqn.seq2+1)&(0x01000000>0))上述if语句恒

8、成立,导致SQN混乱。【纠正措施】补充一对括号,修改代码为:if(((sqn.seq2+1)&0x01000000)>0)表达式副作用:移植后出错【问题描述】产品移植到新平台后,下发某命令,配置不成功。【问题定位】问题代码如下:Set_Config_Table(DB_Query(),Get_Next_WD());原来的平台编译器先执行Get_Next_WFD(),后执行DB_Query(),结果正确;新的平台编译器先执行DB_Query(),后执行Get_Next_WD()。在这两个函数中,都读写了全局变量g_MuxData,所以两种

9、计算次序的执行结果不一样。【纠正措施】明确语句执行次序,函数参数不再使用表达式:intnWDID=Get_Next_WD();intnDBID=DB_Query();Set_Config_Table(nDBID,nWDID);表达式副作用:定义【定义】副作用(side-effect)指执行后对程序运行环境造成影响,除了无效代码外,C/C++的每条语句要么使程序流程改变,要么产生副作用。每个表达式都产生一个值,同时可能包含副作用(例如将产生的值赋给一个变量)。在C/C++语言中,表达式副作用是必须而且有意为之的,但C/C++要求表达式副

10、作用必须在sequencepoint之前结束;在两个连续sequencepoint之间,一个对象所保存值最多只能被修改一次;如果对象的值被修改了一次,那么表达式中出现此对象的唯一目的只能是为了求出这个被修改的新值。否则可

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。