これは特定のコンパイラであれば、私は知らないが、私はDEVCで2つの式を実行しているしようとしたとき++i = i ++ + ++ cの出力の差; i = ++ i + C++;
i=++i + c++
が1
を与えます。しかし b=i++ + ++c
と b=++i + ++c
が結果を生成するのに対し、i=c=b=0;
i=i++ + ++c
が2
を与えますどちらの式でも1
。
同じ式で変数を2回インクリメントすると、C標準仕様では定義されていない値になってしまいますが、コンパイラがこれらの出力をどのように生成するのか不思議です。誰かがどのように理由を説明してくれますか?
未定義の動作。 [悪魔はあなたの鼻から飛ぶかもしれません](http://www.urbandictionary.com/define.php?term=nasal%20demons)。実際には、結果を 'i'に代入しないとこの問題は面白いでしょう。これは未定義の動作を引き起こします。 –
@Fred Larsonは2番目の例では有効ではありませんが、最初に定義されているのは未定義です –
@Jesus:両方で 'i'に割り当てが戻っているので、どちらも未定義の動作です。代入と増分の間にシーケンスポイントはありません。 –