-2

次のプログラムの出力を説明できません。私の知る限り、出力は19になるはずですが、実行すると20の出力が得られます。gccを使用してこのプログラムをコンパイルしました。

int main()
{ 

    int x, y = 5;

    x = ++y + ++y + --y;
    printf("%d", x);

    return 0;
}
4

2 に答える 2

2

あなたのプログラムyは、2 つのシーケンス ポイント (あなたの場合、ステートメントの最後) の間で複数回変更すると、未定義の動作を悪用します。で警告をオンにすると-Wall、コンパイラはおそらくそれについて警告することさえあります。

于 2013-02-23T16:52:40.760 に答える
-6

6+7+6 = 19 なので、19 が出力になります

于 2013-02-23T16:53:08.967 に答える