错误的返回值

错误的返回值

  做为函数的最常见的输出方式,函数的返回值往往扮演者非常重要的角色。然而,在写程序的过程中,却经常不注意返回值的使用。遇到一些错误或者稀奇古怪的写法。下面就是一个经典案例。

UINT ReadDisk(ULONG64 nSectorOff, LPVOID lpSectorData, UINT nCount)
{
    if(m_nDiskIndex == INVALID_DISK_INDEX)
        return FALSE;
    return DioReadPhysicalDisk(*(LPULONG_64)&nSectorOff,lpSectorData,nCount,m_nDiskIndex);
}  

  显然,第4行返回的FALSE与函数返回值类型是不统一的。通过查阅DioWritePhysicalDisk函数的声明我们也可以知道,其返回的是读取扇区的数量。当然,此处FALSE恰好等于0。歪打正着,也不会出错。但是,并不能否定该函数存在问题的事实。假如日后该函数由另外一个同事来维护一下。需求是,当读取某个特殊扇区时进行一些过滤操作,输出一些特定的值。该同事比较懒,又是新手,没有查阅DioWritePhysicalDisk的声明,也对UINT这个返回值类型多做思考。时间紧任务重,又遇到一个急性子。于是,该同事将代码改成了:

UINT WriteDisk(ULONG64 nSectorOff, LPVOID lpSectorData, UINT nCount)
{
    if(m_nDiskIndex == INVALID_DISK_INDEX)
        return FALSE;
    if (nSectorOff == 1 && nCount == 2)
    {
        static BYTE byCode[1024] = {0};
        ....
        memcpy(lpSectorData, byCode, sizeof(byCode));
        ....
        return TRUE;
    }

    return DioWritePhysicalDisk(*(LPULONG_64)&nSectorOff,lpSectorData,nCount,m_nDiskIndex);
}  

  BUG就此引入。
  记住他不是在该一个函数,他在维护一个产品。他不会每没改完一个函数时都验证一下。而要等上2、3个小时后。终于,他将7、8个文件全部改好了。很不幸,该同事记性也不好。他已经对这个小地方已经遗忘了。又或者这个函数时深藏在程序的底部。发现错误的地方跟出现错误的地方有万里之遥。于是,接下来3、5个小时,该同事可能都废在了调试上。如果该同事功力再弱一点,花上1、2天都是有可能的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值