1 / 24
文档名称:

软件编程低级错误:变量.ppt

格式:ppt   大小:670KB   页数:24页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件编程低级错误:变量.ppt

上传人:文库旗舰店 2018/9/15 文件大小:670 KB

下载得到文件列表

软件编程低级错误:变量.ppt

相关文档

文档介绍

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