咫尺与天涯

软件运行时展现出来的极严重的错误,在代码中,也许只是一个字符的错误!

就像是vector,一开始的咫尺,到最后就是天涯!

又像是蝴蝶挥动的翅膀,最终导致的飓风!

程序员的职业素质,就是有架构师的视野,自顶至下的计划,精密的逻辑,同时还要有抽丝拨茧的技术。

 

难缠的错误列表

1、溢出错误

在该实例中,移位操作针对int整数操作,导致数值溢出错误。

int b = 0;
int
n = 0; ... n |= (b & 31) << k; vs
int b = 0;
long n = 0; ... n |= (b & 31L) << k;

以上两段代码唯一的区别就是在31后面加了L表示长整型数。如果不用长整型数,在向左移位时就会导致移除错误。由于程序逻辑没有问题,只是执行结果是错的,调试起来极其麻烦。在程序设计中,使用移位操作时记得使用较大的类型避免溢出错误的发生。

 

2、?:运算符使用

在该实例里面,RealNumberValue记录了统计结果的值,结果使用三元运算符返回了错误的结果导致统计结果始终无法显示。

public double RealNumberValue
{
get
    {
        if (this.qrMeasures == null || this.qrMeasures.Count == 0)
            return double.NaN;
        return this.qrMeasures[this.measureIndex].Values != null
            ? double.NaN
            : (double) this.qrMeasures[this.measureIndex].Values[this.rowIndex];
    }
}

在使用?:三元运算符是,一定要避免将返回结果写反的情况,否则将导致返回结果不对的情况。如果不是特别熟练,请使用if..else取代?:的使用。

3、连续逻辑判断

在下面的例子中,有两个使用||链接起来的判断,错误发生在连接符上,起初使用的&&。

if (textureData == null || !texture.Update(textureData, true))
     flag = false;

连续逻辑判断很容易混淆连接符后面的语句的执行条件,因此如果无法直观的确定后面逻辑的执行条件,请使用两个语句来表示连续逻辑判断,避免逻辑错误。

posted @ 2015-03-20 17:26  sulerzh  阅读(208)  评论(0编辑  收藏  举报