欢迎来到天天文库
浏览记录
ID:56341486
大小:386.00 KB
页数:24页
时间:2020-06-11
《华为常见C、C++软件编程低级错误:变量.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、公司常见软件编程低级错误:变量C语言软件编程规范工作组2021/7/27前言这套材料作为编程规范的辅助材料,帮助大家理解编程规范背后的原理。C和C++语言是我司的主流编程语言,然而C/C++具有很多强大的语言特性,从而导致C/C++非常复杂,使得代码更容易出现BUG、难以阅读和维护。业界知名的编程规范都对C/C++容易出现问题的语言特性进行管理。例如MISRA(汽车工业软件可靠性联合会)制定的1998版的MISRAC规范指出,一些在C看来可以接受,却存在隐患的地方有127处之多。2004版的MI
2、SRAC规范将针对C语言的规则增加到了141条。对于程序员来说,能工作的代码并不等于“好”代码。“好”代码的指标很多,包括可读性、可维护性、可移植性和可靠性等。出现网上问题的代码,大多数是不良编程习惯引起的。不遵守编程规范的代码,往往也是最不可靠的代码。本胶片收集了常见的变量部分案例,给出了相应的纠正措施。对应的编程规范:在首次使用前初始化变量,初始化的地方离使用的地方越近越好;明确全局变量的初始化顺序,避免跨模块的初始化依赖;防止局部变量与全局变量同名;尽量减少没有必要的数据类型默认转换与强制
3、转换。指针初始值错误【问题描述】M设备升级到××版本后只要是与S设备通过扩展ECC连接的网元都会发生频繁复位【问题定位】指针m_BoardObject没有申请内存,但赋值为1。后续程序执行时,判断m_BoardObject不等于NULL,于是处理X号板业务。但实际上产品并没有安装X号板,导致系统复位。【纠正措施】指针m_BoardObject没有使用时,赋初值为NULL。【举一反三】开发人员处理指针时,通常认为非空指针是合法的,然后就可能调用它。绝对不要写作违背大家习惯的代码。变量在某些条件下没
4、有初始化【问题描述】在设备增加对象到最大值时,系统出现段错误【问题定位】代码如下:VOS_UINT32ulSlotIndex;.......if(MAX_STACK_CAP>m_ulThirdKeyMax){pstSlotStru=(SLOT_STRU*)(m_pucSlotStru+ulSlotIndex*m_ulSlotStruSize);if(VOS_NULL_PTR!=pstSlotStru->apObj[ulThirdKey]){returnERROR_PARC_TABLE_OBJ_A
5、LREADY_EXIST;}pstSlotStru->apObj[ulThirdKey]=pObj;++m_ulObjNum;++pstSlotStru->ulObjNum;}elseif(0==ulThirdKey)//如果不是索引,同时第三级关键字为0,那么不用分配槽表项{ulSlotIndex=m_astSubrack[ulSubrackNo].aulSlotIndex[ulSlotNo];.......}pstSlotStru->apObj[ulSlotIndex]=0;见红色部分代码,
6、我们可以发现在第一个if中,ulSlotIndex没有被赋值,还是维持初始值VOS_NULL_LONG。最后用这个去访问数据,结果出现踩内存结构成员没有初始化(1)【问题描述】位置登记成功后,LM漫游的用户类型变成了区域漫游类型【问题定位】代码如下:structTProfileChangedInd{unsignedcharprofile:1;//1:表示被修改0:没有修改unsignedcharwinService:1;unsignedcharmwnCount:1;unsignedcharres
7、erved:5;};((TProfileChangedInd*)sqlProfileChangedInd.arr)->profile=True;由于只对该结构的profile位进行了赋值,就更新数据库,该结构的其他位的值取了随机值,导致用户的签约类型变化。【纠正措施】将结构的其他成员赋初始值为0,代码如下:*sqlProfileChangedInd.arr=0;((TProfileChangedInd*)sqlProfileChangedInd.arr)->profile=True;结构成员没
8、有初始化(2)【问题描述】HFSSA2到HFAIP2局向接通率凌晨时候偏低【问题定位】代码如下:ediDspInfo[oeEntity.m_btEntitySeq].m_dwNMEntityId=oeEntity.m_dwNMEntityId;ediDspInfo[oeEntity.m_btEntitySeq].m_btValid=1;ediDspInfo[oeEntity.m_btEntitySeq].m_btDisplayFormat=oeEntity.m_btDisplayFormat;发
此文档下载收益归作者所有