-4

重複の可能性:
誰でもこれらの未定義の動作を説明できますか (i = i++ + ++i 、 i = i++ など…)

私はこのコードを持っていますが、その機能がわかりません。

main()
{
 int i=1;
 i= ++i + ++i + ++i;
 printf("%d",i);
}

私はそれをコンパイルしようとしましたが、出力10を取得しましたが、方法がわかりません。私が理解したのは、加算操作が実行される前に、2 つの ++i に値 3 が割り当てられ、1 つの ++i に値 4 が割り当てられていることです。この場合、インクリメント演算子がどのように機能するかわかりません。Plzはこれで私を助けてください.

4

2 に答える 2

1

動作は未定義です.. SOで検索すると、これに似た投稿がたくさんあります。

たとえば、x = x++ + ++x; の評価順序はどうなるでしょうか。なれ?またはなぜこれらの構成 (++ を使用) が未定義の動作なのですか? もっと。

最後に、単なる意見/コメントです。理解するのも難しいため、そのようなタイプのコードを書くことを支持する人はいないと思います(したがって、質問の理由です)。

于 2012-08-16T15:28:49.860 に答える
0

私はあなたがそれをするべきではないと確信しています。基本的に、同じ式内で値を複数回変更しないでください。そうしないと、「未定義の動作」が発生します。これは、「コンパイラは何が起こるかを保証しません。

(技術的には、ルールは、同じシーケンス ポイント間で値を複数回変更しないことです)

于 2012-08-16T15:30:16.950 に答える