a = 5;
c = (b =a+2) - (a=1);
2番目のステートメントを実行する効果は、cの未定義の動作ですが、次のような他の書籍のように現れます。デニスによって、左から右に実行されると書かれています。どちらが正しいか?C言語の優先順位
a = 5;
c = (b =a+2) - (a=1);
2番目のステートメントを実行する効果は、cの未定義の動作ですが、次のような他の書籍のように現れます。デニスによって、左から右に実行されると書かれています。どちらが正しいか?C言語の優先順位
上記の場合、a
の
c=(b=a+2) -(a=1);
値が変更されるとの間のシーケンスポイントなしに読み出されるので、undefined behaviorあります。 C11
は、附属書§J.2、未定義挙動
スカラーオブジェクトに副作用が同じスカラー物体上の異なる副作用 または値の計算のいずれかにunsequencedに対して使用している引用
同じスカラーの値 オブジェクトです。また、関連
、章§6.5
からオペレータとオペランドのグループ化は、構文で示されています。 85) の指定を除いて、副次式の副作用と値の計算は順序付けされていません。 86)
したがって、どの部分式が最初に評価されるかは保証されません。
閉じるが、評価は(必ず)同時ではありません。 –
@KeithThompson Sir、私はそれを_italics_に入れています。代わりの言い回しを提案できますか? –
「同時に」という言葉を削除して、ただシーケンスポイントがないと言ってください。 –
これは未定義の動作です。 – BLUEPIXY
「DennisのC」は何ですか? [K&R](https://en.wikipedia.org/wiki/The_C_Programming_Language)について言えば、左から右への実行について何も言わない。 – user2357112
キングはそれを本当に言っていますか?どのエディションとページ番号ですか? –