您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 警告信息解决方法整理
warning:/*withincomment举例:/************************************************//*/*savesnmpentrydata/*addbyTinaLee2003/7/11/*************************************************/说明:意思是说/**/中间又包含了/*修改:改成这样就好了/**************************************************savesnmpentrydata*addbyTinaLee2003/7/11*************************************************/warning:nopreviousprototypefor'get_char_for_sta'举例:无说明:函数没有声明,只有定义修改:在相应的.h文件中添加该函数的声明。warning:unusedparameter'mcb'举例:intifnMenuQuit(MCB_T*mcb){returnQUIT;}说明:因为函数参数中的mcb,在该函数中没有被使用,所以产生warning修改:对没使用的参数使用para=para;intifnMenuQuit(MCB_T*mcb){mcb=mcb;----------添加该行returnQUIT;}warning:comparisonbetweensignedandunsigned举例:INT4s4UnitID=0;INT4s4ChipID=0;uint32u0=0;PMAP_BUNIT_ITE(s4UnitID,u0,s4ChipID)说明:类型不一致。修改:使用相同的类型(视具体情况而定)。warning:unusedvariable`iRet'举例:func(){intiRet=error_none;..............................returnerror_none;}说明:函数中定义局部变量iRet,但没有使用。修改:(1)删除该变量(2)在合适的地方使用该变量如结尾改为:returniRet;warning:suggestparenthesesaroundassignmentusedastruthvalue举例:func(char*format){charc;while(c=*format++){.............}}说明:该warning的意思是建议程序员对while中的条件语句加上括号,因为编译器不知道到底是=,还是==修改:while((c=*format++))明确告诉编译器,这里确实是赋值语句,然后判断c是否为真。warning:declarationof'remove'shadowsaglobaldeclaration举例:intbcm_port_learn_modify(intunit,bcm_port_tport,uint32add,uint32remove){intrv;PORT_PARAM_CHECK(unit,port);PORT_LOCK(unit);rv=_bcm_port_learn_modify(unit,port,add,sdkremove);PORT_UNLOCK(unit);returnrv;}说明:因为库函数stdio.h中使用了全局变量remove,所以和该函数声明中的remove冲突。修改:把该函数的变量名改掉。如把remove改为sdkremove附:linux的patch中也是采用的修改变量名的方法。linuxpatchwarning:redundantredeclarationof'ifnDispTitle'举例:在m_main.c中第50行intifnDispTitle(MCB_T*mcb);在menuext.h中第954行externintifnDispTitle(MCB_T*mcb);说明:产生这种warning多数情况是因为m_main.c没有对于的.h文件,因此该函数在.c文件中声明,所以在别的地方用该函数的时候,使用externfuncname()来声明,就会产生这种warning.解决方法:还没想到warning:missingbracesaroundinitializer举例:typedefstrunctS{inta;intb;intc;}S;Ss[3]={1,2,3,4,5,6,7,8,9};说明:这个warning是说同一个结构体中的数据初始化的时候应该放在一个括号里面。在menu结构体初始化中,有大量的此类warning,加上括号即可解决。修改:加上括号即可。Ss[3]={{1,2,3},{4,5,6},{7,8,9}};warning:functiondeclarationisn'taprototype举例:在mac_if.h中UI32_Tu32fnFDB_GetDiscards();说明:当声明的函数中没有参数时,括号中不用为空,填入void修改:UI32_Tu32fnFDB_GetDiscards(void);suggestexplicitbracestoavoidambiguous`else'举例:M_A_MIRO.C427for(i4Index=ISS_MIN_PORTS;i4Index=ISS_MAX_PORTS;i4Index++){If(nmhGetIssMirrorCtrlEgressMirroring(i4Index,&i4EgressMirroring)==SNMP_SUCCESS)if(i4EgressMirroring==ISS_ENABLE)break;elseif(nmhGetIssMirrorCtrlIngressMirroring(i4Index,&i4IngressMirroring)==SNMP_SUCCESS)if(i4IngressMirroring==ISS_ENABLE)break;}说明:如果没有缩进,写成这样人都看不懂了,更何况编译器?修改:重写这段代码。附:在web的diffserv部分,有一部分代码使用if;elseif;........else;其嵌套达到10层以上,令人叹为观止,结果编译出来的代码有问题,产生error.warning:comparisonbetweensignedandunsigned举例:intiLeniLen=strlen(au8Buffer);if(iLen==strlen(au8Buffer1)&&strncmp(au8Buffer,au8Buffer1,iLen)==0).................;.................;说明:iLen被声明成int型,而strlen的返回值是unsignedint型,所以会产生warning修改:把iLen声明成unsignedint型arraysubscripthastype`char'举例:I8_Ti8TrunkSearch;if(i32TrunkID[i8TrunkSearch]==i32CurrentTrunk)...............;...............;说明:这个warning是说,数组的下标被定义成char型了,由于char型有可能是负数,因此会产生难以预料的错误。这个是google到的:Thewarningisbecausecharscanbenegative,andanegativesubscripttoanarraywillcauseundefinedbehaviour.Thisisnotarequireddiagnostic;IguesstheGCCdevelopersfeelthatthiserrorismorelikelytooccurwithacharthanwithothersignedintegraltypes。修改:使用无符号类型替代有符号类型。warning:`return'withnovalue,infunctionreturningnon-void举例:INT1MSTPGetInstanceVlanMap(UI32_Tu32InstIndex,UINT1*vlanlist){.................;.................;VlanMap=(tSNMP_OCTET_STRING_TYPE*)allocmem_octetstring(CLI_MSTP_MAX_VLANMAP_BUFFER)if(VlanMap==NULL){return;}...............;...............;}说明:由于该函数要求返回一个INT1型的数,而这里使用return;所以会产生warning修改:添加上相应的返回值。warning:controlreachesendofnon-voidfunction举例:intvfnDot1xPortInit(MCB_T*mcb){UINT4u4Interface;for(u4Interface=1;u4InterfacePNAC_MAXPORTS;u4Interface++){if(!PMAP_IFX_IS_VALID(u4Interface))continue;else{GiCurrPortNo=u4Interface;returnOK;}}}说明:函数声明的返回类型是int型,而循环出来以后没有了返回值,因此产生warning,看代码得知,如果从for循环出来,则说明没有找到GiCurrPortNo,因此应该返回错误值修改:在函数末尾添加returnERROR;warning:returntypedefaultsto`int'举例:m_a_dot1x.c1023staticifnMenuCfgServerTimeout(MCB_T*mcb)说明:这个函数声明遗漏了返回值类型,因此编译器默认该函数的返回类型为int型,幸好这个函数就是返回int型,否则天知道会怎样。修改根据代码添加返回值类型。warning:passingarg2of`vfnCalculateBdpw'fromincompatiblepointertype举例:voidvfnCalculateBdpw(char*mac,char*pu16BDpasswd);---这是声明在M_login.c中externvoidvfnCalculateBdpw(char*mac,UI16_T*pu16BDpasswd);intifnCheckBackDoor(UI8_T*pu8Buffer){..............;vfnCalculateBdpw((char*)au8MAC,(char*)au8BDpass);..............;}说明:看了上面的代码就明白咋回事了,声明的是char型,又变成了UI16_T,然后使用的时候又成了char修改:把m_login.c中的声明改成char型。warning:nonewlineatendoffile说明:从google上搜到的,fromgcc@gcc.gnu.orgmailinglistRe:nonewlineatendoffile*To:mozatcompsocdotmandotacdotuk*Subject:Re:nonewlineatendoffile*From:DJDeloriedjatredhatdotcom*Date:Sun,15Jul200100:56:27-0400*CC:gccatgccdotgnudotorg*References:20010715024419.A84310@compsoc.man.ac.ukWhatistherationaleforthiswarning?Whatcanbreakorisitastandardsthing?Imaginefoo.h:blahbl
本文标题:警告信息解决方法整理
链接地址:https://www.777doc.com/doc-2041131 .html