当编译器可以自由终止循环时?

时间:2013-09-18 06:41:08

标签: c

6.8.5.6 
An iteration statement whose controlling expression is not a constant expression,
that performs no input/output operations, does not access volatile objects, and 
performs no synchronization or atomic operations in its body, controlling 
expression, or (in the case of a for statement) its expression-3, may be assumed 
by the implementation to terminate.

如果满足上述条件,编译器就可以终止循环。真的吗? 如果是的话,我试图模拟这种情况,但没有成功。 我试过了,

int main()
{
    // Some statements...
    {
        int a = 0;
        int b = 100;
        int i=0;
        while(++i>=0)
        {
            a = b;
        }
    }
    // Some statements...
    return 0;
}

任何人都可以帮我模拟这种情况。

谢谢,

2 个答案:

答案 0 :(得分:0)

好吧,编译器可以在那里做任何事情。整数溢出是未定义的行为。如果你写了while (i==0),则适用6.8.5.6。

答案 1 :(得分:0)

尝试使用编译器优化级别,例如 -O2,-O3 。它可以帮助你:))

注意:

对于GCC系列编译器,请尝试 -O2或-O3

对于MSVC,请尝试 / O2或/ O3