2011-02-01 4 views
0

ポストインクリメント演算子はいつ増分に影響しますか? http://gd.tuwien.ac.at/languages/c/programming-bbrown/c_015.htmからシーケンスポイントに対するポストインクリメント

1):私は2つの意見に遭遇してきた

POST手段は、任意の 代入演算後の操作を行います。

2)クローサー家庭、answer on SO()C++でいえ氏は述べています:

...それは表現 (次のシーケンスポイント)の終わりまで増加 を遅らせます。

だから、シーケンスポイントに到達するまで、ポストインクリメント操作...

A)が待っていたり

B)は、前にいつでも起こる)代入演算子や

Cを投稿起こりますシーケンスポイント?

答えて

5

正しい解釈はCです。増分は、具体的にはC標準次のシーケンスポイント、前のいつか起こる(C99、6.5.2.4、2)これは言う:

オペランドの記憶値を更新する副作用が 間で以前に発生しなければならないと次のシーケンスポイント。

全段落の引用:

に後置++演算子の結果は、オペランドの値です。結果が になると、オペランドの値がインクリメントされます。 (つまり、適切な タイプの値1が追加されます)。 ポインターの制約、タイプ、および変換、および操作の影響については、加算演算子および複合割り当て の説明を参照してください。オペランドの格納された値を更新する副作用は、前のシーケンスポイントと次のシーケンスポイントの間で発生します( )。

+0

ですから、 'i = 0; a [i ++] = 10; 'undefined、' i'はセミコロンの前にいつでも増やすことができますか? –

+0

@crypto:いいえ、値はインクリメントする前に取得されます。私は私の答えに段落の完全な引用を追加しました – Hasturkun

0

ポストインクリメント演算は、インクリメント演算子が使用されている式に関係なく、常に次のシーケンスポイントの前に発生します。 詳細については、このリンクを参照してください。http://en.wikipedia.org/wiki/Sequence_point

関連する問題