下载此文档

第二章 C语言编程规范.ppt


文档分类:IT计算机 | 页数:约64页 举报非法文档有奖
1/64
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/64 下载此文档
文档列表 文档介绍
单片机编程规范----主编:郑思鹏杨宗禄梁荣生夏立闯赵龙C语言编程规范参考资料:林锐高质量C++/-7-24AndrewKoenigCTrapsandPitfalls(C陷阱与缺陷)BYD-LPJ-A-10007软件编程规范A02010-7-24MISRAC2004i++案例分析以下代码运行结果:inti=3,y;y=i*i++;y=?A9B12C16DA或CE不知道类似的,i*++i;i++*i;++i*i;i++*i++;i++*i++*i++;结果是多少?if(ishigh&&(x==i++))执行这条语句后i是否自动加1?问题:如何保证程序员的理解是正确的?如何保证编译器的理解是正确的?如何保证编译器的理解与程序员是一致的?如何保证所有人的理解是一致的?如何保证编译器不同版本、不同场合都是一致的?switch案例byteExSw(bytechr){byteret;switch(chr&0xC0){case0x00:{ret=0;break;}case0x40:{ret=1;break;}case0x80:{ret=2;break;}case0xC0:{ret=3;break;}}returnret;},结果是什么?,结果是什么?交替编译运行,结果是什么?增加default语句,运行结果如何?对ret进行初始化,运行结果如何?将0xC0改为0xC0u,运行结果如何?,功能正常;,功能与预期不符。start=OSTime;/*start、end、OSTime数据类型为INT16U*/end=start+t=3;/*连续3次检测信号*/for(;(((OSTime-end)&0x8000U)!=0)&&(cnt!=0);cnt--){if(GetSnrSta()!=HALL_ON){cnt=4;}}经反复调试,发现数据类型INT16U对编译结果有影响。INT16U为2字节无符号数(unsignedshortint),将类型定义中short去掉后,。启示:有变化即有差异,即有风险。开发工具如此,软件代码也是这样。哪怕是再小的变化,看起来绝对没有影响,实际上可能存在想象不到的错误。开发工具存在bug,须进行白盒测试,确保程序实际运行结果与预期一致。=与==if(x=y)if(x=5)if(5==x)x==y;类似的,&与&&,|与||,<与<<,>与>>/*案例y=x/*p;y=x/*p;y=x/(*p);数据类型问题1:执行以下程序,result_8的值是多少?uint8_tport=0x5a;uint8_tresult_8;result_8=(~port)>>4;问题2:执行以下程序,d的值是多少?uint16_ta=10;uint16_tb=65531;uint32_tc=0;uint32_td;d=a+b+c;危险的类型转换u32x=u16a+u16b;u32a=(uint32_t)(u16a*u16b);f64a=u16a/u16b;f32a=(float32_t)(u16a/u16b);f64a=f32a+f32b;f64a=(float64_t)(f32a+f32b);整数溢出if((x+y)>z)if((x-y)<0)假定a和b是非负整型变量,我们需要检查a+b是否溢出,一种想当然的方式是:if((a+b)<0)然而,正确的方式是:if(((unsigned)a+(unsigned)b)>INT_MAX)

第二章 C语言编程规范 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数64
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xiang1982071
  • 文件大小211 KB
  • 时间2020-06-27
最近更新