您的位置:控制工程论坛网论坛 » 软件与程序 » 软件编程经典培训实例 4、不同数据类型之间的比较操作

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

软件编程经典培训实例 4、不同数据类型之间的比较操作

xilinxue  发表于 2008/11/6 12:53:10      938 查看 1 回复  [上一主题]  [下一主题]

手机阅读

在循环终止条件的判断中,不同类型变量的比较操作是容易造成死循环错误的地方,同时也是开发人员容易忽视的地方,值得测试人员多加留意。下面两个例子是该类错误的两种典型情况:
【例三】file02文件中某函数中如下代码,可能造成死循环:
         ......
            int i;
 WORD *pCheck  =(WORD*)p;
 WORD wCheckSum=*pCheck;
 pCheck++;

 for(i=1;i<dwLen/2;i++)
 {
  wCheckSum^=(*pCheck);
  pCheck++;
 }
 //binlen had already word alignment
 return (wCheckSum);  
 ......
   该段代码是在DOS环境下用BC编译的,由于循环变量i是int型(2个字节),而dwLen是DWORD型(4个字节),如果dwLen大于65536,那么该函数就是死循环了。

上面的例子是不同类型变量之间直接比较操作,还有一种情况是函数的返回值与另一不同类型的变量比较,见下面例子:

1楼 0 0 回复
  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/6 12:53:10

    【例四】file03.c文件中某函数中如下代码,
           while( ftell(fp)< Part[3])
      {.....
                             } 
      ftell返回long型,而Part是DWORD型,有符号变量和无符号变量的比较,可能造成死循环。


    类似的例子还有很多,类型不匹配的问题还有许多种情况,都是代码中的隐患,有时会造成严重的后果,需要引起足够的重视。对于该类问题,我们可以利用PC-LINT工具对代码进行细致的检查。


     

    2楼 回复本楼

    引用 xilinxue 2008/11/6 12:53:10 发表于2楼的内容

总共 , 当前 /