for 中企图通过 `i` 控制循环结束

    for (int i = 0; i < 30; ++i)
    {
        // Do something other.
        foo();
        bar();
        baz();
        // ...

        if (/* Some condition */)
        {
            // 满足 xxx 条件, 退出循环.
            i = INT_MAX;
        }
    }

这段简短的代码中, 隐藏着一个 bug.

当 Some Condition 满足条件时, `i = INT_MAX` 会执行, 此时作者期待 i == INT_MAX 从而使 i < 30 为 false 而退出循环

但是问题就在于, 执行完 i = INT_MAX 后, 循环引用计数器 i 会执行 for 循环体中的 ++i, 导致 i 溢出, 变为一个超级小的负数, 违背了作者的原意.

 

posted @ 2013-10-04 10:43  walfud  阅读(340)  评论(0编辑  收藏  举报