6
    #include <stdio.h>

    int main()
    {
        int a = 10;
        if (a == a--)
            printf("TRUE 1\t");
        a = 10;

        if (a == --a)
            printf("TRUE 2\t");
    }

2 番目の if ステートメントが true なのはなぜですか?

出力: TRUE 1 TRUE 2

同じ変数を減分された値と比較しているため、これは未定義の動作が原因で発生していますか?

4

3 に答える 3

12

正解trueです。未定義の動作が見られるため、条件は次のように評価されます。式で副作用のある演算子を含む変数が使用されている場合、シーケンス ポイントを==持たない式で同じ変数を再度使用することは違法です ( はシーケンスを持ちません)。ポイント)。

これは--、式を評価するときに使用される値が正しい限り (つまり、後置表記の減分前の値、またはプレフィックス表記のデクリメント)。

于 2014-01-25T12:23:36.807 に答える