2016-12-26 8 views
1
a = 5; 
c = (b =a+2) - (a=1); 

2番目のステートメントを実行する効果は、cの未定義の動作ですが、次のような他の書籍のように現れます。デニスによって、左から右に実行されると書かれています。どちらが正しいか?C言語の優先順位

+3

これは未定義の動作です。 – BLUEPIXY

+2

「DennisのC」は何ですか? [K&R](https://en.wikipedia.org/wiki/The_C_Programming_Language)について言えば、左から右への実行について何も言わない。 – user2357112

+2

キングはそれを本当に言っていますか?どのエディションとページ番号ですか? –

答えて

2

上記の場合、a

c=(b=a+2) -(a=1); 

値が変更されるとの間のシーケンスポイントなしに読み出されるので、undefined behaviorあります。 C11は、附属書§J.2、未定義挙動

スカラーオブジェクトに副作用が同じスカラー物体上の異なる副作用 または値の計算のいずれかにunsequencedに対して使用している引用

同じスカラーの値 オブジェクトです。また、関連

、章§6.5

からオペレータとオペランドのグループ化は、構文で示されています。 85) の指定を除いて、副次式の副作用と値の計算は順序付けされていません。 86)

したがって、どの部分式が最初に評価されるかは保証されません。

+0

閉じるが、評価は(必ず)同時ではありません。 –

+0

@KeithThompson Sir、私はそれを_italics_に入れています。代わりの言い回しを提案できますか? –

+0

「同時に」という言葉を削除して、ただシーケンスポイントがないと言ってください。 –

関連する問題