0
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;
}

このシナリオをシミュレートするのを手伝ってくれる人はいますか?

ありがとう、

4

2 に答える 2

0

-O2、-O3などのコンパイラ最適化レベルで試してください。それはあなたを助けるはずです:)

ノート:

GCC ファミリのコンパイラの場合は、-O2 または -O3を試してください

MSVC の場合は、/O2 または /O3を試してください

于 2013-09-18T06:47:38.857 に答える
0

まあ、コンパイラはそこで何でも想定できます。整数オーバーフローは未定義の動作です。while (i==0)6.8.5.6 と書いた場合は適用されます。

于 2013-09-18T06:44:37.467 に答える